int er;
if ((opline->opcode == ZEND_DIV || opline->opcode == ZEND_MOD) &&
- ((Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_LONG &&
- Z_LVAL(ZEND_OP2_LITERAL(opline)) == 0) ||
- (Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_DOUBLE &&
- Z_DVAL(ZEND_OP2_LITERAL(opline)) == 0.0))) {
+ zval_get_long(&ZEND_OP2_LITERAL(opline)) == 0) {
+ if (RESULT_USED(opline)) {
+ SET_VAR_SOURCE(opline);
+ }
+ opline++;
+ continue;
+ } else if ((opline->opcode == ZEND_SL || opline->opcode == ZEND_SR) &&
+ zval_get_long(&ZEND_OP2_LITERAL(opline)) < 0) {
if (RESULT_USED(opline)) {
SET_VAR_SOURCE(opline);
}
zval result;
int er;
- if (opline->opcode == ZEND_DIV &&
- Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_LONG &&
- Z_LVAL(ZEND_OP2_LITERAL(opline)) == 0) {
+ if ((opline->opcode == ZEND_DIV || opline->opcode == ZEND_MOD) &&
+ zval_get_long(&ZEND_OP2_LITERAL(opline)) == 0) {
/* div by 0 */
break;
+ } else if ((opline->opcode == ZEND_SL || opline->opcode == ZEND_SR) &&
+ zval_get_long(&ZEND_OP2_LITERAL(opline)) < 0) {
+ /* shift by negative number */
+ break;
}
er = EG(error_reporting);
EG(error_reporting) = 0;