From: Kurt Zeilenga Date: Fri, 7 Feb 2003 17:56:15 +0000 (+0000) Subject: base64 decode sanity checks X-Git-Tag: OPENLDAP_REL_ENG_2_1_13~56 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4daf3a2c7f2778f1a8d8c5700f3164fbd9a6c72f;p=openldap base64 decode sanity checks --- diff --git a/libraries/liblutil/passwd.c b/libraries/liblutil/passwd.c index a2235c45f5..751852520a 100644 --- a/libraries/liblutil/passwd.c +++ b/libraries/liblutil/passwd.c @@ -486,7 +486,12 @@ static int chk_ssha1( unsigned char SHA1digest[LUTIL_SHA1_BYTES]; int rc; unsigned char *orig_pass = NULL; - + + /* safety check */ + if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(SHA1digest)) { + return -1; + } + /* decode base64 password */ orig_pass = (unsigned char *) ber_memalloc( (size_t) ( LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) ); @@ -495,7 +500,7 @@ static int chk_ssha1( rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len); - if(rc < 0) { + if (rc <= sizeof(SHA1digest)) { ber_memfree(orig_pass); return -1; } @@ -561,6 +566,11 @@ static int chk_smd5( int rc; unsigned char *orig_pass = NULL; + /* safety check */ + if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(MD5digest)) { + return -1; + } + /* base64 un-encode password */ orig_pass = (unsigned char *) ber_memalloc( (size_t) ( LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) ); @@ -568,7 +578,8 @@ static int chk_smd5( if( orig_pass == NULL ) return -1; rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len); - if ( rc < 0 ) { + + if (rc <= sizeof(MD5digest)) { ber_memfree(orig_pass); return -1; }