From c1f08b6ff1b3988da72e64093e9818f15c83619f Mon Sep 17 00:00:00 2001 From: Greg Hudson Date: Mon, 21 Oct 2019 10:29:35 -0400 Subject: Fix gssalloc_realloc() on Windows gss_inquire_sec_context_by_oid(GSS_C_INQ_SSPI_SESSION_KEY) fails on Windows because generic_gss_add_buffer_set_member() relies on the ability to realloc() a null pointer. Unlike realloc(), HeapReAlloc() requires an input pointer that (from the MSDN documentation) "is returned by an earlier call to the HeapAlloc or HeapReAlloc function". So gssalloc_realloc() must test for null inputs and call HeapAlloc() instead. Reported by Eric Pauly. (cherry picked from commit d66b311093f1782c3610bbc77bd78fce411e8f79) ticket: 8735 version_fixed: 1.17.1 --- src/lib/gssapi/generic/gssapi_alloc.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/gssapi/generic/gssapi_alloc.h b/src/lib/gssapi/generic/gssapi_alloc.h index 9a5cd98..fff88fd 100644 --- a/src/lib/gssapi/generic/gssapi_alloc.h +++ b/src/lib/gssapi/generic/gssapi_alloc.h @@ -36,6 +36,9 @@ gssalloc_calloc(size_t count, size_t size) static inline void * gssalloc_realloc(void *value, size_t size) { + /* Unlike realloc(), HeapReAlloc() does not work on null values. */ + if (value == NULL) + return HeapAlloc(GetProcessHeap(), 0, size); return HeapReAlloc(GetProcessHeap(), 0, value, size); } -- cgit v1.1