Make the alloc_data and k5alloc convenience functions work if the
authorGreg Hudson <ghudson@mit.edu>
Sat, 5 Dec 2009 22:53:04 +0000 (22:53 +0000)
committerGreg Hudson <ghudson@mit.edu>
Sat, 5 Dec 2009 22:53:04 +0000 (22:53 +0000)
caller requests zero bytes, by allocating one byte instead.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23448 dc483132-0cff-0310-8789-dd5450dbe970

src/include/k5-int.h

index cbe0fd9cde50f94528138f36e3ec60c5b49e22fa..04e3310917b79300a433becce1bd4e0195a07264 100644 (file)
@@ -2811,7 +2811,8 @@ string2data(char *str)
 static inline krb5_error_code
 alloc_data(krb5_data *data, unsigned int len)
 {
-    char *ptr = (char *) calloc(len, 1);
+    /* Allocate at least one byte since zero-byte allocs may return NULL. */
+    char *ptr = (char *) calloc((len > 0) ? len : 1, 1);
 
     if (ptr == NULL)
         return ENOMEM;
@@ -2837,11 +2838,12 @@ authdata_eq(krb5_authdata a1, krb5_authdata a2)
 
 /* Allocate zeroed memory; set *code to 0 on success or ENOMEM on failure. */
 static inline void *
-k5alloc(size_t size, krb5_error_code *code)
+k5alloc(size_t len, krb5_error_code *code)
 {
     void *ptr;
 
-    ptr = calloc(size, 1);
+    /* Allocate at least one byte since zero-byte allocs may return NULL. */
+    ptr = calloc((len > 0) ? len : 1, 1);
     *code = (ptr == NULL) ? ENOMEM : 0;
     return ptr;
 }