From 842be672c8cf2e7f847863e3bb12fbf21adee90b Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 8 Mar 2023 00:35:23 +0100 Subject: [PATCH] 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 --- src/tool_writeout_json.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/tool_writeout_json.c b/src/tool_writeout_json.c index bfe070c1ae..6f21f2b2de 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); -- 2.47.3