summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2023-03-08 00:35:23 +0100
committerDaniel Stenberg <daniel@haxx.se>2023-03-09 00:13:41 +0100
commit842be672c8cf2e7f847863e3bb12fbf21adee90b (patch)
treefcf75dfd9f8f9dfa37a3711c7f6c324ca5076127 /src
parent05616379eed2f768ef20371cb4265a445b825fe9 (diff)
downloadcurl-842be672c8cf2e7f847863e3bb12fbf21adee90b.tar.gz
tool_writeout_json. fix the output for duplicate header names
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
Diffstat (limited to 'src')
-rw-r--r--src/tool_writeout_json.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/tool_writeout_json.c b/src/tool_writeout_json.c
index bfe070c1a..6f21f2b2d 100644
--- a/src/tool_writeout_json.c
+++ b/src/tool_writeout_json.c
@@ -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);