]> 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)
committerSquid Anubis <squid-anubis@squid-cache.org>
Sat, 27 May 2023 02:18:58 +0000 (02:18 +0000)
%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 3274609a53d6d61fc19942235f6e2125617f0ef6..eb9012f39ec8588260364b202c3c124bc43e2f92 100644 (file)
@@ -1555,7 +1555,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 cc8516593e62d1edb22ebc1200b6853c9cf2e332..4114db2368dbd78dadb0d09b373fa97f855cb54b 100644 (file)
@@ -71,7 +71,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))