From: Lauri Kenttä Date: Wed, 25 May 2016 18:15:52 +0000 (+0300) Subject: base64_decode: remove redundant check X-Git-Tag: php-7.1.0alpha3~1^2^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fbc74bb5f9df22a038a00f1f0e2437f1def81b93;p=php base64_decode: remove redundant check If length == 0 || *current != '=' is false, the for loop will always end up in this same point, until the if statement becomes true. Thus, the if statement is not needed. --- diff --git a/ext/standard/base64.c b/ext/standard/base64.c index 352e7ea52c..e8d7f04aa4 100644 --- a/ext/standard/base64.c +++ b/ext/standard/base64.c @@ -145,12 +145,13 @@ PHPAPI zend_string *php_base64_decode_ex(const unsigned char *str, size_t length /* run through the whole string, converting as we go */ while (length-- > 0 && (ch = *current++) != '\0') { if (ch == base64_pad) { + /* fail if the padding character is second in a group (like V===) */ + /* FIXME: why do we still allow invalid padding in other places in the middle of the string? */ if (i % 4 == 1) { - if (length == 0 || *current != '=') { - zend_string_free(result); - return NULL; - } - } else if (length > 0 && *current != '=' && strict) { + zend_string_free(result); + return NULL; + } + if (length > 0 && *current != '=' && strict) { while (--length > 0 && isspace(*++current)) { continue; }