]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fix userinfo percent-encoding (#1367)
authorAlex Rousskov <rousskov@measurement-factory.com>
Thu, 25 May 2023 02:10:28 +0000 (02:10 +0000)
committerAmos Jeffries <yadij@users.noreply.github.com>
Mon, 23 Oct 2023 04:20:41 +0000 (17:20 +1300)
%X expects an unsigned int, and that is what we were giving it. However,
to get to the correct unsigned int value from a (signed) char, one has
to cast to an unsigned char (or equivalent) first.

Broken since inception in commit 7b75100.

Also adjusted similar (commented out) ext_edirectory_userip_acl code.

src/acl/external/eDirectory_userip/ext_edirectory_userip_acl.cc
src/anyp/Uri.cc

index dbc20ae54d4187267d0539ae8d1cfb039d6ca33f..9028d15625941c3ebbc4f54b2052293019c47994 100644 (file)
@@ -1612,7 +1612,7 @@ MainSafe(int argc, char **argv)
         /* BINARY DEBUGGING *
                     local_printfx("while() -> bufa[%" PRIuSIZE "]: %s", k, bufa);
                     for (i = 0; i < k; ++i)
-                      local_printfx("%02X", bufa[i]);
+                      local_printfx("%02X", static_cast<unsigned int>(static_cast<unsigned char>(bufa[i])));
                     local_printfx("\n");
         * BINARY DEBUGGING */
         /* Check for CRLF */
index a6a5d5d9ed403fbf1ba408787cd18f7558fd87d4..3d19188e946fffab49206fcfdab03f393917ff0a 100644 (file)
@@ -70,7 +70,7 @@ AnyP::Uri::Encode(const SBuf &buf, const CharacterSet &ignore)
     while (!tk.atEnd()) {
         // TODO: Add Tokenizer::parseOne(void).
         const auto ch = tk.remaining()[0];
-        output.appendf("%%%02X", static_cast<unsigned int>(ch)); // TODO: Optimize using a table
+        output.appendf("%%%02X", static_cast<unsigned int>(static_cast<unsigned char>(ch))); // TODO: Optimize using a table
         (void)tk.skip(ch);
 
         if (tk.prefix(goodSection, ignore))