]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool_writeout_json. fix the output for duplicate header names
authorDaniel Stenberg <daniel@haxx.se>
Tue, 7 Mar 2023 23:35:23 +0000 (00:35 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 8 Mar 2023 23:13:41 +0000 (00:13 +0100)
Header entries with index != 0 are handled at the index 0 level so they
should then be skipped when iterated over.

Reported-by: Boris Okunskiy
Fixes #10704
Closes #10707

src/tool_writeout_json.c

index bfe070c1aec3069fc36574234ba404e3eb9c9362..6f21f2b2de546c113ab2631fbeabd1fd9c5f017d 100644 (file)
@@ -110,11 +110,6 @@ void headerJSON(FILE *stream, struct per_transfer *per)
   fputc('{', stream);
   while((header = curl_easy_nextheader(per->curl, CURLH_HEADER, -1,
                                        prev))) {
-    if(prev)
-      fputs(",\n", stream);
-    jsonWriteString(stream, header->name, TRUE);
-    fputc(':', stream);
-    prev = header;
     if(header->amount > 1) {
       if(!header->index) {
         /* act on the 0-index entry and pull the others in, then output in a
@@ -122,6 +117,11 @@ void headerJSON(FILE *stream, struct per_transfer *per)
         size_t a = header->amount;
         size_t i = 0;
         char *name = header->name;
+        if(prev)
+          fputs(",\n", stream);
+        jsonWriteString(stream, header->name, TRUE);
+        fputc(':', stream);
+        prev = header;
         fputc('[', stream);
         do {
           jsonWriteString(stream, header->value, FALSE);
@@ -132,13 +132,18 @@ void headerJSON(FILE *stream, struct per_transfer *per)
                               -1, &header))
             break;
         } while(1);
+        fputc(']', stream);
       }
-      fputc(']', stream);
     }
     else {
+      if(prev)
+        fputs(",\n", stream);
+      jsonWriteString(stream, header->name, TRUE);
+      fputc(':', stream);
       fputc('[', stream);
       jsonWriteString(stream, header->value, FALSE);
       fputc(']', stream);
+      prev = header;
     }
   }
   fputs("\n}", stream);