Skip to content

Commit 54277ee

Browse files
committed
inc/dec with undefined vars
1 parent d58e3c0 commit 54277ee

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
--TEST--
2+
Inc/dec on undefined variable: warning converted to exception
3+
--FILE--
4+
<?php
5+
6+
set_error_handler(function($severity, $m) {
7+
static $count = 0;
8+
// Ignore the warning when we are var_dumping in the catch
9+
if ($count++ % 2 == 0) {
10+
throw new Exception($m, $severity);
11+
}
12+
});
13+
14+
unset($x);
15+
try {
16+
$x++;
17+
} catch (\Exception $e) {
18+
echo $e->getMessage(), PHP_EOL;
19+
var_dump($x);
20+
}
21+
unset($x);
22+
try {
23+
$x--;
24+
} catch (\Exception $e) {
25+
echo $e->getMessage(), PHP_EOL;
26+
var_dump($x);
27+
}
28+
unset($x);
29+
try {
30+
++$x;
31+
} catch (\Exception $e) {
32+
echo $e->getMessage(), PHP_EOL;
33+
var_dump($x);
34+
}
35+
unset($x);
36+
try {
37+
--$x;
38+
} catch (\Exception $e) {
39+
echo $e->getMessage(), PHP_EOL;
40+
var_dump($x);
41+
}
42+
unset($x);
43+
?>
44+
--EXPECT--
45+
Undefined variable $x
46+
NULL
47+
Undefined variable $x
48+
NULL
49+
Undefined variable $x
50+
NULL
51+
Undefined variable $x
52+
NULL

Zend/zend_vm_def.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,6 +1487,9 @@ ZEND_VM_HELPER(zend_pre_inc_helper, VAR|CV, ANY)
14871487
SAVE_OPLINE();
14881488
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
14891489
ZVAL_UNDEFINED_OP1();
1490+
if (UNEXPECTED(EG(exception))) {
1491+
HANDLE_EXCEPTION();
1492+
}
14901493
ZVAL_NULL(var_ptr);
14911494
}
14921495

@@ -1541,6 +1544,9 @@ ZEND_VM_HELPER(zend_pre_dec_helper, VAR|CV, ANY)
15411544
SAVE_OPLINE();
15421545
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15431546
ZVAL_UNDEFINED_OP1();
1547+
if (UNEXPECTED(EG(exception))) {
1548+
HANDLE_EXCEPTION();
1549+
}
15441550
ZVAL_NULL(var_ptr);
15451551
}
15461552

@@ -1596,6 +1602,9 @@ ZEND_VM_HELPER(zend_post_inc_helper, VAR|CV, ANY)
15961602
SAVE_OPLINE();
15971603
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15981604
ZVAL_UNDEFINED_OP1();
1605+
if (UNEXPECTED(EG(exception))) {
1606+
HANDLE_EXCEPTION();
1607+
}
15991608
ZVAL_NULL(var_ptr);
16001609
}
16011610

@@ -1647,6 +1656,9 @@ ZEND_VM_HELPER(zend_post_dec_helper, VAR|CV, ANY)
16471656
SAVE_OPLINE();
16481657
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
16491658
ZVAL_UNDEFINED_OP1();
1659+
if (UNEXPECTED(EG(exception))) {
1660+
HANDLE_EXCEPTION();
1661+
}
16501662
ZVAL_NULL(var_ptr);
16511663
}
16521664

Zend/zend_vm_execute.h

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)