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
This commit is contained in:
Daniel Stenberg 2023-03-08 00:35:23 +01:00
parent 05616379ee
commit 842be672c8
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View 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);