summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/filters.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/ext/standard/filters.c b/ext/standard/filters.c
index be7346fc2e..9966305c70 100644
--- a/ext/standard/filters.c
+++ b/ext/standard/filters.c
@@ -526,9 +526,6 @@ static php_conv_err_t php_conv_base64_decode_convert(php_conv_base64_decode *ins
}
if ((pack_bcnt | ustat) == 0) {
if (ocnt < 1) {
- urem |= (pack << urem_nbits);
- urem_nbits += 8;
-
err = PHP_CONV_ERR_TOO_BIG;
break;
}
@@ -539,6 +536,14 @@ static php_conv_err_t php_conv_base64_decode_convert(php_conv_base64_decode *ins
}
}
+ if (urem_nbits >= pack_bcnt) {
+ urem |= (pack << (urem_nbits - pack_bcnt));
+ urem_nbits += (nbitsof_pack - pack_bcnt);
+ } else {
+ urem |= (pack >> (pack_bcnt - urem_nbits));
+ urem_nbits += (nbitsof_pack - pack_bcnt);
+ }
+
inst->urem = urem;
inst->urem_nbits = urem_nbits;
inst->ustat = ustat;