diff options
author | Steve Holme <steve_holme@hotmail.com> | 2013-11-30 19:09:09 +0000 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2013-11-30 19:14:29 +0000 |
commit | 4d10f486293ffa127cc6cd607e4c1af70c4f2282 (patch) | |
tree | d54616a015a571a1d68a3a6dc9877c118cf20d93 /lib/base64.c | |
parent | dc68120e6352cc2516bf25758f3aae71400b9702 (diff) | |
download | curl-4d10f486293ffa127cc6cd607e4c1af70c4f2282.tar.gz |
base64: Post basic validation tidy up
Due to the length checks introduced in commit e17c1b25bc33eb there is no
need to allow for extra space in the output buffer for a non-padded last
quantum.
Diffstat (limited to 'lib/base64.c')
-rw-r--r-- | lib/base64.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/lib/base64.c b/lib/base64.c index 93b8be2dd..a84e3be72 100644 --- a/lib/base64.c +++ b/lib/base64.c @@ -115,14 +115,13 @@ CURLcode Curl_base64_decode(const char *src, return CURLE_BAD_CONTENT_ENCODING; /* Calculate the number of quantums */ - numQuantums = (length + equalsTerm) / 4; + numQuantums = srcLen / 4; /* Calculate the size of the decoded string */ rawlen = (numQuantums * 3) - equalsTerm; - /* The buffer must be large enough to make room for the last quantum - (which may be partially thrown out) and the zero terminator. */ - newstr = malloc(rawlen+4); + /* Allocate our buffer including room for a zero terminator */ + newstr = malloc(rawlen + 1); if(!newstr) return CURLE_OUT_OF_MEMORY; @@ -135,16 +134,16 @@ CURLcode Curl_base64_decode(const char *src, newstr += 3; src += 4; } - /* This final decode may actually read slightly past the end of the buffer - if the input string is missing pad bytes. This will almost always be - harmless. */ + /* Decode the last quantum */ decodeQuantum(lastQuantum, src); for(i = 0; i < 3 - equalsTerm; i++) newstr[i] = lastQuantum[i]; - newstr[i] = '\0'; /* zero terminate */ + /* Zero terminate */ + newstr[i] = '\0'; - *outlen = rawlen; /* return size of decoded data */ + /* Return the size of decoded data */ + *outlen = rawlen; return CURLE_OK; } |