X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=ssl_common.c;h=4cf72913b27839f48fcb5c4dee5d56153d80d57c;hp=18817137f1e38265ffc4ec3e8828fa7818341e04;hb=59d3fb7457a63f1c1aca6fc6e5517b7d88c224b2;hpb=6d67d8973b484f5a781fd46a04dc2410b769f970 diff --git a/ssl_common.c b/ssl_common.c index 18817137..4cf72913 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 = 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;