Skip to content

Commit 5472741

Browse files
committed
Do not optimize out ini_get() when the entry does not exist during compilation
The entry may exist later
1 parent f07a08d commit 5472741

File tree

5 files changed

+30
-10
lines changed

5 files changed

+30
-10
lines changed

Zend/Optimizer/sccp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -908,7 +908,7 @@ static inline int ct_eval_func_call(
908908

909909
ini_entry = zend_hash_find_ptr(EG(ini_directives), Z_STR_P(args[0]));
910910
if (!ini_entry) {
911-
ZVAL_FALSE(result);
911+
return FAILURE;
912912
} else if (ini_entry->modifiable != ZEND_INI_SYSTEM) {
913913
return FAILURE;
914914
} else if (ini_entry->value) {

ext/opcache/tests/gh8466.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Bug GH-8466: ini_get() is optimized out when the option does not exist during compilation
3+
--SKIPIF--
4+
<?php include dirname(__DIR__, 3) . "/dl_test/tests/skip.inc"; ?>
5+
--FILE--
6+
<?php
7+
8+
if (extension_loaded('dl_test')) {
9+
exit('Error: dl_test is already loaded');
10+
}
11+
12+
if (PHP_OS_FAMILY === 'Windows') {
13+
$loaded = dl('php_dl_test.dll');
14+
} else {
15+
$loaded = dl('dl_test.so');
16+
}
17+
18+
var_dump($loaded);
19+
20+
var_dump(ini_get('dl_test.long'));
21+
--EXPECT--
22+
bool(true)
23+
string(1) "0"

ext/standard/tests/general_functions/dl-001.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ var_dump($loaded);
2020
dl_test_test1();
2121
var_dump(dl_test_test2("World!"));
2222

23-
// ini_get() gets optimized out, so we use ini_get_all() here
24-
var_dump(ini_get_all()["dl_test.long"]["local_value"]);
25-
var_dump(ini_get_all()["dl_test.string"]["local_value"]);
23+
var_dump(ini_get("dl_test.long"));
24+
var_dump(ini_get("dl_test.string"));
2625

2726
echo "OK\n";
2827
--EXPECT--

ext/standard/tests/general_functions/dl-002.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ var_dump($loaded);
2121
dl_test_test1();
2222
var_dump(dl_test_test2("World!"));
2323

24-
// ini_get() gets optimized out, so we use ini_get_all() here
25-
var_dump(ini_get_all()["dl_test.long"]["local_value"]);
26-
var_dump(ini_get_all()["dl_test.string"]["local_value"]);
24+
var_dump(ini_get("dl_test.long"));
25+
var_dump(ini_get("dl_test.string"));
2726

2827
echo "OK\n";
2928
--EXPECT--

ext/standard/tests/general_functions/dl-003.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ var_dump(dl_test_test2("World!"));
2222
ini_set("dl_test.long", "1");
2323
ini_set("dl_test.string", "world");
2424

25-
// ini_get() gets optimized out, so we use ini_get_all() here
26-
var_dump(ini_get_all()["dl_test.long"]["local_value"]);
27-
var_dump(ini_get_all()["dl_test.string"]["local_value"]);
25+
var_dump(ini_get("dl_test.long"));
26+
var_dump(ini_get("dl_test.string"));
2827

2928
echo "OK\n";
3029
--EXPECT--

0 commit comments

Comments
 (0)