diff options
author | Daniel Stenberg <daniel@haxx.se> | 2023-03-08 00:35:23 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2023-03-09 00:13:41 +0100 |
commit | 842be672c8cf2e7f847863e3bb12fbf21adee90b (patch) | |
tree | fcf75dfd9f8f9dfa37a3711c7f6c324ca5076127 /src | |
parent | 05616379eed2f768ef20371cb4265a445b825fe9 (diff) | |
download | curl-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.c | 17 |
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); |