fix size param for gnutls_dh_params_export_pkcs3() again
authorPhil Pennock <pdp@exim.org>
Sun, 27 May 2012 00:10:40 +0000 (20:10 -0400)
committerPhil Pennock <pdp@exim.org>
Sun, 27 May 2012 00:10:40 +0000 (20:10 -0400)
src/src/tls-gnu.c

index b2659d7a794c208f795ab7da15404c6a8978e57f..aa2f92514b79133173c57f4645f225cd687d3733 100644 (file)
@@ -512,18 +512,15 @@ if (rc < 0)
   m.data = malloc(m.size);
   if (m.data == NULL)
     return tls_error(US"memory allocation failed", strerror(errno), NULL);
   m.data = malloc(m.size);
   if (m.data == NULL)
     return tls_error(US"memory allocation failed", strerror(errno), NULL);
-  /* this will return a size 1 less than the allocation size above; I
-  originally used sz so as to avoid type compatibility errors, as gnutls_datum
-  uses "unsigned int" for the size field, but this call takes separate data
-  and size fields, with the latter being a size_t*.  For now, we live with
-  the error as being safer than throwing away type information. */
+  /* this will return a size 1 less than the allocation size above */
   rc = gnutls_dh_params_export_pkcs3(dh_server_params, GNUTLS_X509_FMT_PEM,
   rc = gnutls_dh_params_export_pkcs3(dh_server_params, GNUTLS_X509_FMT_PEM,
-      m.data, &m.size);
+      m.data, &sz);
   if (rc != GNUTLS_E_SUCCESS)
     {
     free(m.data);
     exim_gnutls_err_check(US"gnutls_dh_params_export_pkcs3() real");
     }
   if (rc != GNUTLS_E_SUCCESS)
     {
     free(m.data);
     exim_gnutls_err_check(US"gnutls_dh_params_export_pkcs3() real");
     }
+  m.size = sz; /* shrink by 1, probably */
 
   sz = write_to_fd_buf(fd, m.data, (size_t) m.size);
   if (sz != m.size)
 
   sz = write_to_fd_buf(fd, m.data, (size_t) m.size);
   if (sz != m.size)