base64: Post basic validation tidy up

Due to the length checks introduced in commit e17c1b25bc there is no
need to allow for extra space in the output buffer for a non-padded last
quantum.
This commit is contained in:
Steve Holme 2013-11-30 19:09:09 +00:00
parent dc68120e63
commit 4d10f48629
1 changed files with 8 additions and 9 deletions

View File

@ -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;
}