]> granicus.if.org Git - curl/commitdiff
fixed a very, very rare and very, very little memory leak
authorJean-Philippe Barette-LaPierre <jpbarrette@gmail.com>
Wed, 8 Jan 2003 02:27:47 +0000 (02:27 +0000)
committerJean-Philippe Barette-LaPierre <jpbarrette@gmail.com>
Wed, 8 Jan 2003 02:27:47 +0000 (02:27 +0000)
lib/escape.c

index 0ec7ae5c0ee80ad7de67ba62a977dedb146a6dd5..b35333ddf521a39487674b893fc9d16d6f424f33 100644 (file)
@@ -41,6 +41,7 @@ char *curl_escape(const char *string, int length)
 {
   int alloc = (length?length:(int)strlen(string))+1;  
   char *ns = malloc(alloc);
+  char *testing_ptr = NULL;
   unsigned char in;
   int newlen = alloc;
   int index=0;
@@ -55,9 +56,14 @@ char *curl_escape(const char *string, int length)
       newlen += 2; /* the size grows with two, since this'll become a %XX */
       if(newlen > alloc) {
         alloc *= 2;
-        ns = realloc(ns, alloc);
-        if(!ns)
+        testing_ptr = realloc(ns, alloc);
+        if(!testing_ptr) {
+          free( ns );
           return NULL;
+        }
+        else {
+          ns = testing_ptr;
+        }
       }
       sprintf(&ns[index], "%%%02X", in);
 
@@ -80,6 +86,10 @@ char *curl_unescape(const char *string, int length)
   unsigned char in;
   int index=0;
   unsigned int hex;
+  if( !ns ) {
+    return NULL;
+  }  
   
   while(--alloc > 0) {
     in = *string;
@@ -97,7 +107,6 @@ char *curl_unescape(const char *string, int length)
   }
   ns[index]=0; /* terminate it */
   return ns;
-  
 }
 
 void curl_free(void *p)