From 8310dd14f3db3c52c3cd7fedf480a1df960e3310 Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Sat, 17 Jan 2015 09:20:05 -0800 Subject: [PATCH] squidclient: buf reuse looses encoded header data after rev.13785 --- tools/squidclient/squidclient.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/tools/squidclient/squidclient.cc b/tools/squidclient/squidclient.cc index f51024795d..32106b3ff7 100644 --- a/tools/squidclient/squidclient.cc +++ b/tools/squidclient/squidclient.cc @@ -431,12 +431,14 @@ main(int argc, char *argv[]) std::cerr << "ERROR: Proxy password missing" << std::endl; exit(1); } - blen = base64_encode_update(&ctx, reinterpret_cast(buf), strlen(user), reinterpret_cast(user)); - blen += base64_encode_update(&ctx, reinterpret_cast(buf+blen), 1, reinterpret_cast(":")); - blen += base64_encode_update(&ctx, reinterpret_cast(buf+blen), strlen(password), reinterpret_cast(password)); - blen += base64_encode_final(&ctx, reinterpret_cast(buf+blen)); - snprintf(buf, BUFSIZ, "Proxy-Authorization: Basic %.*s\r\n", (int)blen, buf); + uint8_t *pwdBuf = new uint8_t[base64_encode_len(strlen(user)+1+strlen(password))]; + blen = base64_encode_update(&ctx, pwdBuf, strlen(user), reinterpret_cast(user)); + blen += base64_encode_update(&ctx, pwdBuf+blen, 1, reinterpret_cast(":")); + blen += base64_encode_update(&ctx, pwdBuf+blen, strlen(password), reinterpret_cast(password)); + blen += base64_encode_final(&ctx, pwdBuf+blen); + snprintf(buf, BUFSIZ, "Proxy-Authorization: Basic %.*s\r\n", (int)blen, reinterpret_cast(pwdBuf)); strcat(msg, buf); + delete[] pwdBuf; } if (www_user) { const char *user = www_user; @@ -449,12 +451,14 @@ main(int argc, char *argv[]) std::cerr << "ERROR: WWW password missing" << std::endl; exit(1); } - blen = base64_encode_update(&ctx, reinterpret_cast(buf), strlen(user), reinterpret_cast(user)); - blen += base64_encode_update(&ctx, reinterpret_cast(buf+blen), 1, reinterpret_cast(":")); - blen += base64_encode_update(&ctx, reinterpret_cast(buf+blen), strlen(password), reinterpret_cast(password)); - blen += base64_encode_final(&ctx, reinterpret_cast(buf+blen)); - snprintf(buf, BUFSIZ, "Authorization: Basic %.*s\r\n", (int)blen, buf); + uint8_t *pwdBuf = new uint8_t[base64_encode_len(strlen(user)+1+strlen(password))]; + blen = base64_encode_update(&ctx, pwdBuf, strlen(user), reinterpret_cast(user)); + blen += base64_encode_update(&ctx, pwdBuf+blen, 1, reinterpret_cast(":")); + blen += base64_encode_update(&ctx, pwdBuf+blen, strlen(password), reinterpret_cast(password)); + blen += base64_encode_final(&ctx, pwdBuf+blen); + snprintf(buf, BUFSIZ, "Authorization: Basic %.*s\r\n", (int)blen, reinterpret_cast(pwdBuf)); strcat(msg, buf); + delete[] pwdBuf; } #if HAVE_GSSAPI if (www_neg) { -- 2.47.3