tool: Fixed incorrect return code if command line parser runs out of memory
authorSteve Holme <steve_holme@hotmail.com>
Sun, 19 Jan 2014 12:20:01 +0000 (12:20 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 19 Jan 2014 12:31:34 +0000 (12:31 +0000)
In the rare instance where getparameter() may return PARAM_NO_MEM whilst
parsing a URL, cURL would return this error code, which is equivalent to
CURLE_FTP_ACCEPT_FAILED in cURL error codes terms.

Instead, return CURLE_FAILED_INIT and output the failure reason as per
the other usage of getparameter().

src/tool_operate.c

index 7cb8077..801e5d4 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -286,12 +286,12 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
 
   /* Parse options */
   for(i = 1, stillflags = TRUE; i < argc; i++) {
+    char *orig_opt = argv[i];
+
     if(stillflags &&
        ('-' == argv[i][0])) {
       char *nextarg;
       bool passarg;
-      char *orig_opt = argv[i];
-
       char *flag = argv[i];
 
       if(curlx_strequal("--", argv[i]))
@@ -302,18 +302,7 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
         nextarg = (i < (argc-1)) ? argv[i+1] : NULL;
 
         res = getparameter(flag, nextarg, &passarg, config);
-        if(res) {
-          int retval = CURLE_OK;
-          if(res != PARAM_HELP_REQUESTED) {
-            const char *reason = param2text(res);
-            helpf(config->errors, "option %s: %s\n", orig_opt, reason);
-            retval = CURLE_FAILED_INIT;
-          }
-          res = retval;
-          goto quit_curl;
-        }
-
-        if(passarg) /* we're supposed to skip this */
+        if(!res && passarg) /* we're supposed to skip this */
           i++;
       }
     }
@@ -321,8 +310,17 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
       bool used;
       /* just add the URL please */
       res = getparameter((char *)"--url", argv[i], &used, config);
-      if(res)
-        goto quit_curl;
+    }
+
+    if(res) {
+      int retval = CURLE_OK;
+      if(res != PARAM_HELP_REQUESTED) {
+        const char *reason = param2text(res);
+        helpf(config->errors, "option %s: %s\n", orig_opt, reason);
+        retval = CURLE_FAILED_INIT;
+      }
+      res = retval;
+      goto quit_curl;
     }
   }