diff options
-rw-r--r-- | alpine/smime.c | 20 | ||||
-rw-r--r-- | pith/pine.hlp | 2 | ||||
-rw-r--r-- | pith/smime.c | 28 | ||||
-rw-r--r-- | pith/smkeys.c | 7 |
4 files changed, 36 insertions, 21 deletions
diff --git a/alpine/smime.c b/alpine/smime.c index 3e67bc7d..0bf051ec 100644 --- a/alpine/smime.c +++ b/alpine/smime.c @@ -900,6 +900,7 @@ smime_config_init_display(struct pine *ps, CONF_S **ctmp, CONF_S **first_line) for(i = 0; i < sizeof(tmp) && i < (ps->ttyo ? ps->ttyo->screen_cols : sizeof(tmp)); i++) tmp[i] = '-'; + tmp[i] = '\0'; new_confline(ctmp); (*ctmp)->flags |= CF_NOSELECT; (*ctmp)->value = cpystr(tmp); @@ -1458,6 +1459,7 @@ smime_setup_size(char **s, size_t buflen, size_t n) snprintf(t, buflen-3, "%zu.%zu", n, n); t += strlen(t); *t++ = 's'; + *t = '\0'; *s = t; } @@ -1542,6 +1544,7 @@ smime_manage_password_file_certs_init(struct pine *ps, CONF_S **ctmp, CONF_S **f for(i = 0; i < sizeof(tmp) && i < (ps->ttyo ? ps->ttyo->screen_cols : sizeof(tmp)); i++) tmp[i] = '-'; + tmp[i] = '\0'; new_confline(ctmp); (*ctmp)->flags |= CF_NOSELECT; @@ -1574,8 +1577,10 @@ smime_manage_password_file_certs_init(struct pine *ps, CONF_S **ctmp, CONF_S **f smime_setup_size(&t, sizeof(u) - strlen(t), e); smime_setup_size(&t, sizeof(u) - strlen(t), df); *t++ = ' '; /* leave an extra space between dates */ + *t = '\0'; /* make valgrind happy */ smime_setup_size(&t, sizeof(u) - strlen(t), dt); *t++ = ' '; /* and another space between date and md5 sum */ + *t = '\0'; /* make valgrind happy again */ smime_setup_size(&t, sizeof(u) - strlen(t), md5); *t = '\0'; /* tie off */ @@ -1643,6 +1648,8 @@ void smime_manage_certs_init(struct pine *ps, CONF_S **ctmp, CONF_S **first_line for(i = 0; i < sizeof(tmp) && i < (ps->ttyo ? ps->ttyo->screen_cols : sizeof(tmp)); i++) tmp[i] = '-'; + tmp[i] = '\0'; + new_confline(ctmp); (*ctmp)->flags |= CF_NOSELECT; (*ctmp)->value = cpystr(tmp); @@ -1657,7 +1664,9 @@ void smime_manage_certs_init(struct pine *ps, CONF_S **ctmp, CONF_S **first_line (*ctmp)->value = cpystr(tmp); for(i = 0; i < sizeof(tmp) && i < (ps->ttyo ? ps->ttyo->screen_cols : sizeof(tmp)); i++) - tmp[i] = '-'; + tmp[i] = '-'; + tmp[i] = '\0'; + new_confline(ctmp); (*ctmp)->flags |= CF_NOSELECT; (*ctmp)->value = cpystr(tmp); @@ -1688,8 +1697,10 @@ void smime_manage_certs_init(struct pine *ps, CONF_S **ctmp, CONF_S **first_line smime_setup_size(&t, sizeof(u) - strlen(t), e); smime_setup_size(&t, sizeof(u) - strlen(t), df); *t++ = ' '; /* leave an extra space between dates */ + *t = '\0'; /* make valgrind happy */ smime_setup_size(&t, sizeof(u) - strlen(t), dt); *t++ = ' '; /* and another space between date and md5 sum */ + *t = '\0'; /* make valgrind happy again */ smime_setup_size(&t, sizeof(u) - strlen(t), md5); *t = '\0'; /* tie off */ @@ -2001,8 +2012,7 @@ save_smime_config_vars(struct pine *ps) vsave = (SAVED_CONFIG_S *)fs_get((V_LAST_VAR+1)*sizeof(SAVED_CONFIG_S)); memset((void *)vsave, 0, (V_LAST_VAR+1)*sizeof(SAVED_CONFIG_S)); - v = vsave; - for(vreal = ps->vars; vreal->name; vreal++,v++){ + for(v = vsave, vreal = ps->vars; vreal->name; vreal++,v++){ if(!(smime_related_var(ps, vreal) || vreal==&ps->vars[V_FEATURE_LIST])) continue; @@ -2017,7 +2027,7 @@ save_smime_config_vars(struct pine *ps) while(list[n]) n++; - v->saved_user_val.l = (char **)fs_get((n+1) * sizeof(char *)); + v->saved_user_val.l = (char **)fs_get((n+1)*sizeof(char *)); memset((void *)v->saved_user_val.l, 0, (n+1)*sizeof(char *)); for(i = 0; i < n; i++) v->saved_user_val.l[i] = cpystr(list[i]); @@ -2043,7 +2053,7 @@ free_saved_smime_config(struct pine *ps, SAVED_CONFIG_S **vsavep) if(vsavep && *vsavep){ for(v = *vsavep, vreal = ps->vars; vreal->name; vreal++,v++){ - if(!(smime_related_var(ps, vreal))) + if(!(smime_related_var(ps, vreal) || vreal==&ps->vars[V_FEATURE_LIST])) continue; if(vreal->is_list){ /* free saved_user_val.l */ diff --git a/pith/pine.hlp b/pith/pine.hlp index 6127908d..3a4f2b48 100644 --- a/pith/pine.hlp +++ b/pith/pine.hlp @@ -140,7 +140,7 @@ with help text for the config screen and the composer that didn't have any reasonable place to be called from. Dummy change to get revision in pine.hlp ============= h_revision ================= -Alpine Commit 260 2018-02-26 01:38:04 +Alpine Commit 268 2018-05-02 20:16:40 ============= h_news ================= <HTML> <HEAD> diff --git a/pith/smime.c b/pith/smime.c index a6ddc8fa..9a901a82 100644 --- a/pith/smime.c +++ b/pith/smime.c @@ -1188,11 +1188,8 @@ renew_cert_data(CertList **data, WhichCerts ctype) X509_STORE *store = NULL; if((store = X509_STORE_new()) != NULL){ - if((lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file())) == NULL){ - X509_STORE_free(store); - store = NULL; - } else{ - free_certlist(data); + if((lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file())) != NULL){ + free_certlist(data); if(SMHOLDERTYPE(ctype) == Directory) add_certs_in_dir(lookup, PATHCERTDIR(ctype), EXTCERT(ctype), data); else /* if(SMHOLDERTYPE(ctype) == Container) */ @@ -1205,7 +1202,9 @@ renew_cert_data(CertList **data, WhichCerts ctype) ps_global->smime->publiccertlist = *data; else ps_global->smime->cacertlist = *data; - } + } + X509_STORE_free(store); + store = NULL; } } setup_certs_backup_by_type(ctype); @@ -1224,6 +1223,9 @@ smime_deinit(void) { dprint((9, "smime_deinit()")); app_RAND_write_file(NULL); + if (s_cert_store != NULL) X509_STORE_free(s_cert_store); + ERR_free_strings(); + EVP_cleanup(); free_smime_struct(&ps_global->smime); } @@ -3242,11 +3244,9 @@ decrypt_file(char *fp, int *rv, PERSONAL_CERT *pc) if(pc == NULL || (text = read_file(fp, 0)) == NULL || *text == '\0') return NULL; - tmp = fs_get(strlen(text) + (strlen(text) << 6) + 1); - for(j = 0, i = strlen("-----BEGIN PKCS7-----") + 1; text[i] != '\0' - && text[i] != '-'; j++, i++) - tmp[j] = text[i]; - tmp[j] = '\0'; + tmp = strchr(text + strlen("-----BEGIN PKCS7-----") + strlen(NEWLINE), '-'); + if(tmp != NULL) *tmp = '\0'; + tmp = text + strlen("-----BEGIN PKCS7-----") + strlen(NEWLINE); ret = rfc822_base64((unsigned char *)tmp, strlen(tmp), &len); @@ -3264,8 +3264,10 @@ decrypt_file(char *fp, int *rv, PERSONAL_CERT *pc) (void) BIO_reset(out); if(PKCS7_decrypt(p7, pc->key, pc->cert, out, 0) != 0){ - BIO_get_mem_data(out, &tmp); - text = cpystr(tmp); + len = BIO_get_mem_data(out, &tmp); + text = fs_get((len+1)*sizeof(char)); + strncpy(text, tmp, len); + text[len-1] = '\0'; BIO_free(out); } else q_status_message1(SM_ORDER, 1, 1, _("Error decrypting: %s"), diff --git a/pith/smkeys.c b/pith/smkeys.c index 1889bb96..25144470 100644 --- a/pith/smkeys.c +++ b/pith/smkeys.c @@ -637,7 +637,8 @@ smime_get_date(const ASN1_TIME *tm) char date[MAILTMPLEN]; char buf[MAILTMPLEN]; char *m, *d, *t, *y, *z; - struct date smd; + int len; + struct date smd; struct tm smtm; (void) BIO_reset(mb); @@ -645,7 +646,8 @@ smime_get_date(const ASN1_TIME *tm) return cpystr(_("Invalid")); (void) BIO_flush(mb); - BIO_read(mb, iobuf, sizeof(iobuf)); + len = BIO_read(mb, iobuf, sizeof(iobuf)); + iobuf[len-1] = '\0'; /* openssl returns the date in the format: * "MONTH (as name) DAY (as number) TIME(hh:mm:ss) YEAR GMT" @@ -678,6 +680,7 @@ smime_get_date(const ASN1_TIME *tm) snprintf(buf, sizeof(buf), "%s/%s/%s", m, d, y + strlen(y) - 2); buf[sizeof(buf)-1] = '\0'; + BIO_free(mb); return cpystr(buf); } |