From ef6f1631610c5314062336648e13a3eb76bb564c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lauri=20Kentt=C3=A4?= Date: Wed, 25 May 2016 21:15:52 +0300 Subject: [PATCH] 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. --- ext/standard/base64.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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; } -- 2.40.0