]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
cli tool: improve ";type=" handling in -F option arguments
authorPatrick Monnerat <patrick@monnerat.net>
Sun, 29 Oct 2017 13:31:03 +0000 (14:31 +0100)
committermonnerat <monnerat@users.noreply.github.com>
Sun, 29 Oct 2017 15:23:06 +0000 (16:23 +0100)
src/tool_formparse.c

index c76fe6f38d34565de5dd139628123c94c018c2a7..719e3413f2425884cb11c6b4df6aec478ef64dda 100644 (file)
@@ -233,12 +233,10 @@ static int get_param_part(struct OperationConfig *config, char endchar,
       }
 
       /* now point beyond the content-type specifier */
-      endpos = type + strlen(type_major) + strlen(type_minor) + 1;
-      for(p = endpos; ISSPACE(*p); p++)
-        ;
-      while(*p && *p != ';' && *p != ',')
-        p++;
-      endct = p;
+      p = type + strlen(type_major) + strlen(type_minor) + 1;
+      for(endct = p; *p && *p != ';' && *p != endchar; p++)
+        if(!ISSPACE(*p))
+          endct = p + 1;
       sep = *p;
     }
     else if(checkprefix("filename=", p)) {
@@ -330,29 +328,27 @@ static int get_param_part(struct OperationConfig *config, char endchar,
       sep = *p;
       *endpos = '\0';
     }
+    else if(endct) {
+      /* This is part of content type. */
+      for(endct = p; *p && *p != ';' && *p != endchar; p++)
+        if(!ISSPACE(*p))
+          endct = p + 1;
+      sep = *p;
+    }
     else {
       /* unknown prefix, skip to next block */
       char *unknown = get_param_word(&p, &endpos, endchar);
 
       sep = *p;
-      if(endct)
-        endct = p;
-      else {
-        *endpos = '\0';
-         if(*unknown)
-           warnf(config->global, "skip unknown form field: %s\n", unknown);
-      }
+      *endpos = '\0';
+      if(*unknown)
+        warnf(config->global, "skip unknown form field: %s\n", unknown);
     }
   }
 
-  /* Terminate and strip content type. */
-  if(type) {
-    if(!endct)
-      endct = type + strlen(type);
-    while(endct > type && ISSPACE(endct[-1]))
-      endct--;
+  /* Terminate content type. */
+  if(endct)
     *endct = '\0';
-  }
 
   if(ptype)
     *ptype = type;