From: Eli Zaretskii Date: Mon, 26 Aug 2019 16:06:13 +0000 (+0300) Subject: Fix crashes in networking with GnuTLS on MS-Windows X-Git-Tag: emacs-27.0.90~1328^2~65 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1071a4fac6f2e70572a1259e073124cbb723e90d;p=emacs.git Fix crashes in networking with GnuTLS on MS-Windows * src/gnutls.c (init_gnutls_functions) [WINDOWSNT]: Define and load gnutls_free. (Fgnutls_format_certificate): Use gnutls_free instead of xfree. This prevents crashes on MS-Windows, since the memory being released was allocated inside GnuTLS. (Bug#31946) --- diff --git a/src/gnutls.c b/src/gnutls.c index a7ef59ab919..67d1fb9552d 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -140,6 +140,7 @@ DEF_DLL_FN (void, gnutls_dh_set_prime_bits, DEF_DLL_FN (int, gnutls_dh_get_prime_bits, (gnutls_session_t)); DEF_DLL_FN (int, gnutls_error_is_fatal, (int)); DEF_DLL_FN (int, gnutls_global_init, (void)); +DEF_DLL_FN (void, gnutls_free, (void *)); DEF_DLL_FN (void, gnutls_global_set_log_function, (gnutls_log_func)); # ifdef HAVE_GNUTLS3 DEF_DLL_FN (void, gnutls_global_set_audit_log_function, (gnutls_audit_log_func)); @@ -326,6 +327,7 @@ init_gnutls_functions (void) LOAD_DLL_FN (library, gnutls_dh_get_prime_bits); LOAD_DLL_FN (library, gnutls_error_is_fatal); LOAD_DLL_FN (library, gnutls_global_init); + LOAD_DLL_FN (library, gnutls_free); LOAD_DLL_FN (library, gnutls_global_set_log_function); # ifdef HAVE_GNUTLS3 LOAD_DLL_FN (library, gnutls_global_set_audit_log_function); @@ -463,6 +465,7 @@ init_gnutls_functions (void) # define gnutls_global_init fn_gnutls_global_init # define gnutls_global_set_audit_log_function fn_gnutls_global_set_audit_log_function # define gnutls_global_set_log_function fn_gnutls_global_set_log_function +# define gnutls_free fn_gnutls_free # define gnutls_global_set_log_level fn_gnutls_global_set_log_level # define gnutls_handshake fn_gnutls_handshake # define gnutls_init fn_gnutls_init @@ -1613,7 +1616,7 @@ string representation. */) memset (out_buf, 0, (out.size + 1) * sizeof (char)); memcpy (out_buf, out.data, out.size); - xfree (out.data); + gnutls_free (out.data); gnutls_x509_crt_deinit (crt); Lisp_Object result = build_string (out_buf);