]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 5378: type mismatch in libTrie (#1830)
authorFrancesco Chemolli <5175948+kinkie@users.noreply.github.com>
Sun, 2 Jun 2024 14:41:16 +0000 (14:41 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Mon, 3 Jun 2024 13:24:59 +0000 (13:24 +0000)
TrieNode::add() incorrectly computed an offset of an internal data
structure, resulting in out-of-bounds memory accesses that could cause
corruption or crashes.

This bug was discovered and detailed by Joshua Rogers at
https://megamansec.github.io/Squid-Security-Audit/esi-underflow.html
where it was filed as "Buffer Underflow in ESI".

lib/libTrie/TrieNode.cc

index 0f991a06d3ef4c62fc4e9ba27fc06c6bcceb5f15..d417e0f54487fdf5724cd203a78e7e7eac61d394 100644 (file)
@@ -32,7 +32,7 @@ TrieNode::add(char const *aString, size_t theLength, void *privatedata, TrieChar
     /* We trust that privatedata and existent keys have already been checked */
 
     if (theLength) {
-        int index = transform ? (*transform)(*aString): *aString;
+        const unsigned char index = transform ? (*transform)(*aString): *aString;
 
         if (!internal[index])
             internal[index] = new TrieNode;