From 1fa05b1eb2cdbbf60ff5bc35b184de29d7e30570 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 3 Dec 2021 16:55:04 +0100 Subject: writeout: fix %{http_version} for HTTP/3 Output "3" properly when HTTP/3 was used. Reported-by: Bernat Mut Fixes #8072 --- src/tool_writeout.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/tool_writeout.c b/src/tool_writeout.c index ed7a3418e..5b22a1a9c 100644 --- a/src/tool_writeout.c +++ b/src/tool_writeout.c @@ -45,12 +45,18 @@ static int writeOffset(FILE *stream, const struct writeoutvar *wovar, struct per_transfer *per, CURLcode per_result, bool use_json); -static const char *http_version[] = { - "0", /* CURL_HTTP_VERSION_NONE */ - "1", /* CURL_HTTP_VERSION_1_0 */ - "1.1", /* CURL_HTTP_VERSION_1_1 */ - "2", /* CURL_HTTP_VERSION_2 */ - "3" /* CURL_HTTP_VERSION_3 */ +struct httpmap { + const char *str; + int num; +}; + +static const struct httpmap http_version[] = { + { "0", CURL_HTTP_VERSION_NONE}, + { "1", CURL_HTTP_VERSION_1_0}, + { "1.1", CURL_HTTP_VERSION_1_1}, + { "2", CURL_HTTP_VERSION_2}, + { "3", CURL_HTTP_VERSION_3}, + { NULL, 0} /* end of list */ }; /* The designated write function should be the same as the CURLINFO return type @@ -165,11 +171,16 @@ static int writeString(FILE *stream, const struct writeoutvar *wovar, if(wovar->ci) { if(wovar->ci == CURLINFO_HTTP_VERSION) { long version = 0; - if(!curl_easy_getinfo(per->curl, CURLINFO_HTTP_VERSION, &version) && - (version >= 0) && - (version < (long)(sizeof(http_version)/sizeof(http_version[0])))) { - strinfo = http_version[version]; - valid = true; + if(!curl_easy_getinfo(per->curl, CURLINFO_HTTP_VERSION, &version)) { + const struct httpmap *m = &http_version[0]; + while(m->str) { + if(m->num == version) { + strinfo = m->str; + valid = true; + break; + } + m++; + } } } else { -- cgit v1.2.1