From: Patrick Monnerat Date: Tue, 4 Oct 2022 14:50:45 +0000 (+0200) Subject: tool: avoid generating ambiguous escaped characters in --libcurl X-Git-Tag: curl-7_86_0~118 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=172259c4de33036e231748205eaa61087d1b9de4;p=thirdparty%2Fcurl.git tool: avoid generating ambiguous escaped characters in --libcurl C string hexadecimal-escaped characters may have more than 2 digits. This results in a wrong C compiler interpretation of a 2-digit escaped character when followed by an hex digit character. The solution retained here is to represent such characters as 3-digit octal escapes. Adjust and extend test 1465 for this case. Closes #9643 --- diff --git a/src/tool_setopt.c b/src/tool_setopt.c index b051388895..917191ef29 100644 --- a/src/tool_setopt.c +++ b/src/tool_setopt.c @@ -252,12 +252,17 @@ static char *c_escape(const char *str, curl_off_t len) strcpy(e, "\\?"); e += 2; } - else if(!ISPRINT(c)) { + else if(ISPRINT(c)) + *e++ = c; + else if(len > 1 && ISXDIGIT(s[1])) { + /* Octal escape to avoid >2 digit hex. */ + msnprintf(e, 5, "\\%03o", (unsigned)c); + e += 4; + } + else { msnprintf(e, 5, "\\x%02x", (unsigned)c); e += 4; } - else - *e++ = c; } while(cutoff--) *e++ = '.'; diff --git a/tests/data/test1465 b/tests/data/test1465 index 356b1e1b94..9703f68cf2 100644 Binary files a/tests/data/test1465 and b/tests/data/test1465 differ