diff options
author | Daniel Stenberg <daniel@haxx.se> | 2021-12-03 16:55:04 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2021-12-03 23:00:37 +0100 |
commit | cdde5414fcf3157d3ed1c071624ca458c2d47acf (patch) | |
tree | e19fbc0ae60188423cbf21ab501f9d99be97ddd1 | |
parent | 92d1aee8b16bb5aa416368cb54ded732cc39c407 (diff) | |
download | curl-cdde5414fcf3157d3ed1c071624ca458c2d47acf.tar.gz |
writeout: fix %{http_version} for HTTP/3
Output "3" properly when HTTP/3 was used.
Reported-by: Bernat Mut
Fixes #8072
Closes #8092
-rw-r--r-- | src/tool_writeout.c | 33 |
1 files 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 { |