characters that are supposed to be ignored by the decoder cause output
corruption.
}
if ((pack_bcnt | ustat) == 0) {
if (ocnt < 1) {
- urem |= (pack << urem_nbits);
- urem_nbits += 8;
-
err = PHP_CONV_ERR_TOO_BIG;
break;
}
}
}
+ 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;