diff options
| author | Nikita Popov <nikic@php.net> | 2016-12-06 22:25:35 +0100 |
|---|---|---|
| committer | Nikita Popov <nikic@php.net> | 2016-12-06 22:25:35 +0100 |
| commit | 76c4a3db080e347663a3999ae38b78cf26dd4c84 (patch) | |
| tree | 1652a83dbffc73137b0069fdf036026528bae0ff | |
| parent | d7e7f74b24dfb85bd373efba94adb9663927e49f (diff) | |
| download | php-git-76c4a3db080e347663a3999ae38b78cf26dd4c84.tar.gz | |
Fix bug #73668
Not bothering to implement special handling to get an accurate
range for this case.
| -rw-r--r-- | NEWS | 6 | ||||
| -rw-r--r-- | ext/opcache/Optimizer/zend_inference.c | 4 | ||||
| -rw-r--r-- | ext/opcache/tests/bug73668.phpt | 8 |
3 files changed, 17 insertions, 1 deletions
@@ -2,10 +2,14 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2017, PHP 7.1.1 -- Opcache: +- Core: . Fixed bug #73663 ("Invalid opcode 65/16/8" occurs with a variable created with list()). (Laruence) + +- Opcache: . Fixed bug #73654 (Segmentation fault in zend_call_function). (Nikita) + . Fixed bug #73668 ("SIGFPE Arithmetic exception" in opcache when divide by + minus 1). (Nikita) 01 Dec 2016, PHP 7.1.0 diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 24be5c3a27..062f8c6696 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -610,6 +610,10 @@ static int zend_inference_calc_binary_op_range( if (op2_min <= 0 && op2_max >= 0) { break; } + if (op1_min == ZEND_LONG_MIN && op2_max == -1) { + /* Avoid ill-defined division, which may trigger SIGFPE. */ + break; + } t1 = op1_min / op2_min; t2 = op1_min / op2_max; t3 = op1_max / op2_min; diff --git a/ext/opcache/tests/bug73668.phpt b/ext/opcache/tests/bug73668.phpt new file mode 100644 index 0000000000..aac5c9e65c --- /dev/null +++ b/ext/opcache/tests/bug73668.phpt @@ -0,0 +1,8 @@ +--TEST-- +Bug #73668: "SIGFPE Arithmetic exception" in opcache when divide by minus 1 +--FILE-- +<?php +$a/-1; +?> +--EXPECTF-- +Notice: Undefined variable: a in %s on line %d |
