summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Faulds <ajf@ajf.me>2014-08-15 17:29:26 +0100
committerAndrea Faulds <ajf@ajf.me>2014-08-19 20:21:22 +0100
commit6a94568f8246f6df33ee259429875bd10ffdf0a8 (patch)
treeb5c8a2305e4016d779736964a7c036b16a5d2c26
parentf07b41b465a5bb314a2d3b2bf309828e2dd7e299 (diff)
downloadphp-git-6a94568f8246f6df33ee259429875bd10ffdf0a8.tar.gz
Return FALSE on bit shift by negative number
-rw-r--r--Zend/zend_operators.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 921d71b685..7d591f52ef 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -1493,6 +1493,12 @@ ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /
op1_lval = Z_LVAL_P(op1);
}
+ if (Z_LVAL_P(op2) < 0) {
+ zend_error(E_WARNING, "Bit shift by negative number");
+ ZVAL_FALSE(result);
+ return FAILURE;
+ }
+
ZVAL_LONG(result, op1_lval << Z_LVAL_P(op2));
return SUCCESS;
}
@@ -1513,6 +1519,12 @@ ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
op1_lval = Z_LVAL_P(op1);
}
+ if (Z_LVAL_P(op2) < 0) {
+ zend_error(E_WARNING, "Bit shift by negative number");
+ ZVAL_FALSE(result);
+ return FAILURE;
+ }
+
ZVAL_LONG(result, op1_lval >> Z_LVAL_P(op2));
return SUCCESS;
}