]> granicus.if.org Git - curl/commitdiff
better cleaning up allocated memory in case of failures
authorDaniel Stenberg <daniel@haxx.se>
Wed, 6 Aug 2003 23:47:01 +0000 (23:47 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 6 Aug 2003 23:47:01 +0000 (23:47 +0000)
src/urlglob.c

index ace4712c209695d1240cd2c8acbb54f48335b347..6694b066ad317adad77249a8cee798a807f0e456 100644 (file)
@@ -232,6 +232,7 @@ static GlobCode glob_word(URLGlob *glob, char *pattern, int pos, int *amount)
    */ 
   char* buf = glob->glob_buffer;
   int litindex;
+  GlobCode res = GLOB_OK;
 
   *amount = 1; /* default is one single string */
 
@@ -261,18 +262,24 @@ static GlobCode glob_word(URLGlob *glob, char *pattern, int pos, int *amount)
 
   switch (*pattern) {
   case '\0':
-    return GLOB_OK;                    /* singular URL processed  */
+    break;                     /* singular URL processed  */
 
   case '{':
     /* process set pattern */
-    return glob_set(glob, ++pattern, ++pos, amount);
+    res = glob_set(glob, ++pattern, ++pos, amount);
+    break;
 
   case '[':
     /* process range pattern */
-    return glob_range(glob, ++pattern, ++pos, amount);
+    res= glob_range(glob, ++pattern, ++pos, amount);
+    break;
   }
 
-  return GLOB_ERROR; /* something got wrong */
+  if(GLOB_OK != res)
+    /* free that strdup'ed string again */
+    free(glob->literal[litindex]);
+
+  return res; /* something got wrong */
 }
 
 int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error)
@@ -463,7 +470,9 @@ char *glob_match_url(char *filename, URLGlob *glob)
         appendlen=1;
        break;
       case UPTNumRange:
-       sprintf(numbuf, "%0*d", pat.content.NumRange.padlength, pat.content.NumRange.ptr_n);
+       sprintf(numbuf, "%0*d",
+                pat.content.NumRange.padlength,
+                pat.content.NumRange.ptr_n);
         appendthis = numbuf;
         appendlen = (int)strlen(numbuf);
        break;