]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fix Digest auth parameter parsing (#415)
authorAmos Jeffries <yadij@users.noreply.github.com>
Sat, 8 Jun 2019 21:09:23 +0000 (21:09 +0000)
committerAmos Jeffries <yadij@users.noreply.github.com>
Wed, 12 Jun 2019 11:20:09 +0000 (23:20 +1200)
Only remove quoting if the domain=, uri= or qop= parameter
value is surrounded by double-quotes.

src/auth/digest/Config.cc

index a8a07cd4dbac4b406f2c85097ddda6b58f878b2b..b547bf83d33602644b2d1d9e2e8d7bbdaef0cedb 100644 (file)
@@ -787,14 +787,14 @@ Auth::Digest::Config::decode(char const *proxy_auth, const char *aRequestRealm)
             if (keyName == SBuf("domain",6) || keyName == SBuf("uri",3)) {
                 // domain is Special. Not a quoted-string, must not be de-quoted. But is wrapped in '"'
                 // BUG 3077: uri= can also be sent to us in a mangled (invalid!) form like domain
-                if (*p == '"' && *(p + vlen -1) == '"') {
+                if (vlen > 1 && *p == '"' && *(p + vlen -1) == '"') {
                     value.limitInit(p+1, vlen-2);
                 }
             } else if (keyName == SBuf("qop",3)) {
                 // qop is more special.
                 // On request this must not be quoted-string de-quoted. But is several values wrapped in '"'
                 // On response this is a single un-quoted token.
-                if (*p == '"' && *(p + vlen -1) == '"') {
+                if (vlen > 1 && *p == '"' && *(p + vlen -1) == '"') {
                     value.limitInit(p+1, vlen-2);
                 } else {
                     value.limitInit(p, vlen);