]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
base64: Post basic validation tidy up
authorSteve Holme <steve_holme@hotmail.com>
Sat, 30 Nov 2013 19:09:09 +0000 (19:09 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 30 Nov 2013 19:14:29 +0000 (19:14 +0000)
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.

lib/base64.c

index 93b8be2dd52bb2a4847dd83ef8ff032106fa740e..a84e3be72c915ceca1f7f745d313e58b949cd7d0 100644 (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;
 }