Remove (untriggerable) overflow in crypto_random_hostname()

Fixes bug 4413; bugfix on xxxx.

Hostname components cannot be larger than 63 characters.
This simple check makes certain randlen cannot overflow rand_bytes_len.
This commit is contained in:
Stephen Palmateer
2011-12-21 12:48:38 -05:00
committed by Nick Mathewson
parent 1e5d66997b
commit 3fadc074ca
2 changed files with 10 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
Minor bugfixes:
- Check for a potential, however unlikely, integer overflow. Fixes bug 4413; Bugfix on 0.2.3.9-alpha.
+8
View File
@@ -82,6 +82,9 @@
#include "sha256.c"
#define SHA256_Final(a,b) sha256_done(b,a)
/* Bug 4413*/
#define MAX_HOSTNAME_SIZE 63
static unsigned char *
SHA256(const unsigned char *m, size_t len, unsigned char *d)
{
@@ -2554,7 +2557,12 @@ crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix,
size_t resultlen, prefixlen;
tor_assert(max_rand_len >= min_rand_len);
randlen = min_rand_len + crypto_rand_int(max_rand_len - min_rand_len + 1);
if (randlen > MAX_HOSTNAME_SIZE) {
randlen = MAX_HOSTNAME_SIZE;
}
prefixlen = strlen(prefix);
resultlen = prefixlen + strlen(suffix) + randlen + 16;