krb5 commit: Fix gssalloc_realloc() on Windows

Greg Hudson <[email protected]>
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/d66b311093f1782c3610bbc77bd78fce411e8f79
commit d66b311093f1782c3610bbc77bd78fce411e8f79
Author: Greg Hudson <[email protected]>
Date:   Mon Oct 21 10:29:35 2019 -0400

    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.
    
    ticket: 8735
    tags: pullup
    target_version: 1.17-next

 src/lib/gssapi/generic/gssapi_alloc.h |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

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);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.