krb5 commit [krb5-1.17]: 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/c1f08b6ff1b3988da72e64093e9818f15c83619f
commit c1f08b6ff1b3988da72e64093e9818f15c83619f
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.
    
    (cherry picked from commit d66b311093f1782c3610bbc77bd78fce411e8f79)
    
    ticket: 8735
    version_fixed: 1.17.1

 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.