X-Git-Url: http://www.privoxy.org/gitweb/show-status?a=blobdiff_plain;f=ssl_common.c;h=45f1e761236c2e5baf896d730640f2ed26a595d9;hb=7fb978c74a8a46bd105d9f0ced92a4be0c9647e6;hp=18817137f1e38265ffc4ec3e8828fa7818341e04;hpb=6d67d8973b484f5a781fd46a04dc2410b769f970;p=privoxy.git diff --git a/ssl_common.c b/ssl_common.c index 18817137..45f1e761 100644 --- a/ssl_common.c +++ b/ssl_common.c @@ -358,11 +358,22 @@ extern void ssl_send_certificate_error(struct client_state *csp) cert = &(csp->server_certs_chain); while (cert->next != NULL) { - size_t base64_len = 4 * ((strlen(cert->file_buf) + 2) / 3) + 1; + size_t base64_len; - message_len += strlen(cert->info_buf) + strlen("
\n") - + base64_len + strlen("Download certificate"); + if (cert->file_buf != NULL) + { + base64_len = 4 * ((strlen(cert->file_buf) + 2) / 3) + 1; + + message_len += strlen(cert->info_buf) + strlen("\n") + + base64_len + strlen("Download certificate"); + } + else + { + log_error(LOG_LEVEL_ERROR, + "Incomplete certificate information for %s.", + csp->http->hostport); + } cert = cert->next; } @@ -379,31 +390,36 @@ extern void ssl_send_certificate_error(struct client_state *csp) cert = &(csp->server_certs_chain); while (cert->next != NULL) { - size_t olen = 0; - size_t base64_len = 4 * ((strlen(cert->file_buf) + 2) / 3) + 1; /* +1 for terminating null*/ - char base64_buf[base64_len]; - memset(base64_buf, 0, base64_len); - - /* Encoding certificate into base64 code */ - ret = ssl_base64_encode((unsigned char*)base64_buf, - base64_len, &olen, (const unsigned char*)cert->file_buf, - strlen(cert->file_buf)); - if (ret != 0) - { - log_error(LOG_LEVEL_ERROR, - "Encoding to base64 failed, buffer is to small"); - } - - strlcat(message, "", message_len); - strlcat(message, cert->info_buf, message_len); - strlcat(message, "\n", message_len); - - if (ret == 0) + if (cert->file_buf != NULL) { - strlcat(message, "Download certificate", message_len); + /* +1 for terminating null */ + size_t base64_len = 4 * ((strlen(cert->file_buf) + 2) / 3) + 1; + size_t olen = 0; + char base64_buf[base64_len]; + + memset(base64_buf, 0, base64_len); + + /* Encoding certificate into base64 code */ + ret = ssl_base64_encode((unsigned char*)base64_buf, + base64_len, &olen, (const unsigned char*)cert->file_buf, + strlen(cert->file_buf)); + if (ret != 0) + { + log_error(LOG_LEVEL_ERROR, + "Encoding to base64 failed, buffer is to small"); + } + + strlcat(message, "
", message_len); + strlcat(message, cert->info_buf, message_len); + strlcat(message, "\n", message_len); + + if (ret == 0) + { + strlcat(message, "Download certificate", message_len); + } } cert = cert->next;