]> granicus.if.org Git - curl/commitdiff
Fixed curl_slist_append handling of out of memory conditions on the
authorDan Fandrich <dan@coneharvesters.com>
Wed, 4 Apr 2007 20:27:47 +0000 (20:27 +0000)
committerDan Fandrich <dan@coneharvesters.com>
Wed, 4 Apr 2007 20:27:47 +0000 (20:27 +0000)
easycode list (discovered by runtests' torture test).

src/main.c

index f9a13e0af74a5aa68fa121078d32048fb8c8e758..777b024a555a03d1ed14881a15a2dff5d7b8aae8 100644 (file)
@@ -3396,14 +3396,15 @@ CURLcode _my_setopt(CURL *curl, const char *name, CURLoption tag, ...)
                        remark?"/* ":"", name, value,
                        remark?" [REMARK] */":"");
 
-  easycode = curl_slist_append(easycode, bufp);
+  if (!curl_slist_append(easycode, bufp))
+    ret = CURLE_OUT_OF_MEMORY;
   curl_free(bufp);
   va_end(arg);
 
   return ret;
 }
 
-static const char *srchead[]={
+static const char * const srchead[]={
   "/********* Sample code generated by the curl command line tool **********",
   " * Lines with [REMARK] below might need to be modified to make this code ",
   " * usable. Add appropriate error code checking  where appropriate.",
@@ -3699,7 +3700,14 @@ operate(struct Configurable *config, int argc, char *argv[])
     clean_getout(config);
     return CURLE_FAILED_INIT;
   }
+
+  /* This is the first entry added to easycode and it initializes the slist */
   easycode = curl_slist_append(easycode, "CURL *hnd = curl_easy_init();");
+  if(!easycode) {
+    clean_getout(config);
+    res = CURLE_OUT_OF_MEMORY;
+    goto quit_curl;
+  }
 
   if (config->list_engines) {
     struct curl_slist *engines = NULL;
@@ -4327,8 +4335,10 @@ operate(struct Configurable *config, int argc, char *argv[])
 
         do {
           res = curl_easy_perform(curl);
-          easycode = curl_slist_append(easycode,
-                                       "ret = curl_easy_perform(hnd);");
+          if (!curl_slist_append(easycode, "ret = curl_easy_perform(hnd);")) {
+            res = CURLE_OUT_OF_MEMORY;
+            break;
+          }
 
           /* if retry-max-time is non-zero, make sure we haven't exceeded the
              time */
@@ -4569,7 +4579,7 @@ quit_curl:
 
   /* cleanup the curl handle! */
   curl_easy_cleanup(curl);
-  easycode = curl_slist_append(easycode, "curl_easy_cleanup(hnd);");
+  curl_slist_append(easycode, "curl_easy_cleanup(hnd);");
 
   if(config->headerfile && !headerfilep && heads.stream)
     fclose(heads.stream);