aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-10-15 15:38:44 +0000
committerNick Mathewson <nickm@torproject.org>2007-10-15 15:38:44 +0000
commit7f9e9c816c007fcf474aec213132b173c6f2b571 (patch)
tree96d066fa5d96d50779586ec77be59747a0c5743c /src
parent161b85d588b8ca3cffe708c07d9216d8355fbf1e (diff)
downloadtor-7f9e9c816c007fcf474aec213132b173c6f2b571.tar
tor-7f9e9c816c007fcf474aec213132b173c6f2b571.tar.gz
r15790@catbus: nickm | 2007-10-15 11:38:28 -0400
Fix bug 528: fix memory leak in base32_decode(). While there, also make base32_decode() accept upper-case inputs. svn:r11946
Diffstat (limited to 'src')
-rw-r--r--src/common/crypto.c2
-rw-r--r--src/or/test.c6
2 files changed, 8 insertions, 0 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 2de0f3169..b21529823 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1891,8 +1891,10 @@ base32_decode(char *dest, size_t destlen, const char *src, size_t srclen)
for (j = 0; j < srclen; ++j) {
if (src[j] > 0x60 && src[j] < 0x7B) tmp[j] = src[j] - 0x61;
else if (src[j] > 0x31 && src[j] < 0x38) tmp[j] = src[j] - 0x18;
+ else if (src[j] > 0x40 && src[j] < 0x5B) tmp[j] = src[j] - 0x41;
else {
log_warn(LD_BUG, "illegal character in base32 encoded string");
+ tor_free(tmp);
return -1;
}
}
diff --git a/src/or/test.c b/src/or/test.c
index 9c707099b..b890959a8 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -3160,6 +3160,12 @@ test_crypto_base32_decode(void)
res = base32_decode(decoded, 60, encoded, 96);
test_eq(res, 0);
test_memeq(plain, decoded, 60);
+ /* Encode, uppercase, and decode a random string. */
+ base32_encode(encoded, 96 + 1, plain, 60);
+ tor_strupper(encoded);
+ res = base32_decode(decoded, 60, encoded, 96);
+ test_eq(res, 0);
+ test_memeq(plain, decoded, 60);
/* Change encoded string and decode. */
if (encoded[0] == 'a')
encoded[0] = 'b';