summaryrefslogtreecommitdiff
path: root/lib/base64.c
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2013-11-30 19:09:09 +0000
committerSteve Holme <steve_holme@hotmail.com>2013-11-30 19:14:29 +0000
commit4d10f486293ffa127cc6cd607e4c1af70c4f2282 (patch)
treed54616a015a571a1d68a3a6dc9877c118cf20d93 /lib/base64.c
parentdc68120e6352cc2516bf25758f3aae71400b9702 (diff)
downloadcurl-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.c17
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;
}