summaryrefslogtreecommitdiff
path: root/ext/opcache
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-12-11 00:46:30 +0300
committerDmitry Stogov <dmitry@zend.com>2019-12-11 00:46:30 +0300
commit20ef51db22c46fd45976eb6d0b780c14022c8873 (patch)
tree0f1051d40ca0675b63f0a1097f87c52e5ce26b84 /ext/opcache
parent518a8f89c1f67c8869f54b374ce90d1cd0135d9b (diff)
downloadphp-git-20ef51db22c46fd45976eb6d0b780c14022c8873.tar.gz
Fixed bug #78937 (Preloading unlinkable anonymous class can segfault)
Diffstat (limited to 'ext/opcache')
-rw-r--r--ext/opcache/tests/bug78937_1.phpt22
-rw-r--r--ext/opcache/tests/bug78937_2.phpt22
-rw-r--r--ext/opcache/tests/bug78937_3.phpt24
-rw-r--r--ext/opcache/tests/bug78937_4.phpt22
-rw-r--r--ext/opcache/tests/bug78937_5.phpt23
-rw-r--r--ext/opcache/tests/bug78937_6.phpt25
-rw-r--r--ext/opcache/tests/preload_bug78937.inc8
7 files changed, 146 insertions, 0 deletions
diff --git a/ext/opcache/tests/bug78937_1.phpt b/ext/opcache/tests/bug78937_1.phpt
new file mode 100644
index 0000000000..1125ad4eb0
--- /dev/null
+++ b/ext/opcache/tests/bug78937_1.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #78937.1 (Preloading unlinkable anonymous class can segfault)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_bug78937.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+class Bar {
+}
+var_dump(foo());
+?>
+--EXPECTF--
+Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6
+
+Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
+
+Fatal error: Anonymous class wasn't preloaded in %spreload_bug78937.inc on line 3
+
diff --git a/ext/opcache/tests/bug78937_2.phpt b/ext/opcache/tests/bug78937_2.phpt
new file mode 100644
index 0000000000..880063298b
--- /dev/null
+++ b/ext/opcache/tests/bug78937_2.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #78937.2 (Preloading unlinkable anonymous class can segfault)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_bug78937.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+include(__DIR__ . "/preload_bug78937.inc");
+class Bar {
+}
+var_dump(foo());
+?>
+--EXPECTF--
+Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6
+
+Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
+object(class@anonymous)#%d (0) {
+} \ No newline at end of file
diff --git a/ext/opcache/tests/bug78937_3.phpt b/ext/opcache/tests/bug78937_3.phpt
new file mode 100644
index 0000000000..1c706e237d
--- /dev/null
+++ b/ext/opcache/tests/bug78937_3.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #78937.3 (Preloading unlinkable anonymous class can segfault)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_bug78937.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+include(__DIR__ . "/preload_bug78937.inc");
+var_dump(foo());
+?>
+--EXPECTF--
+Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6
+
+Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
+
+Fatal error: Uncaught Error: Class 'Bar' not found in %spreload_bug78937.inc:3
+Stack trace:
+#0 %sbug78937_3.php(3): foo()
+#1 {main}
+ thrown in %spreload_bug78937.inc on line 3
diff --git a/ext/opcache/tests/bug78937_4.phpt b/ext/opcache/tests/bug78937_4.phpt
new file mode 100644
index 0000000000..b555516d00
--- /dev/null
+++ b/ext/opcache/tests/bug78937_4.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #78937.4 (Preloading unlinkable anonymous class can segfault)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_bug78937.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+class Bar {
+}
+bar();
+var_dump(new Foo);
+?>
+--EXPECTF--
+Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6
+
+Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
+
+Fatal error: Class foo wasn't preloaded in %spreload_bug78937.inc on line 6 \ No newline at end of file
diff --git a/ext/opcache/tests/bug78937_5.phpt b/ext/opcache/tests/bug78937_5.phpt
new file mode 100644
index 0000000000..f9f01a2a26
--- /dev/null
+++ b/ext/opcache/tests/bug78937_5.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #78937.5 (Preloading unlinkable anonymous class can segfault)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_bug78937.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+include(__DIR__ . "/preload_bug78937.inc");
+class Bar {
+}
+bar();
+var_dump(new Foo);
+?>
+--EXPECTF--
+Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6
+
+Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
+object(Foo)#%d (0) {
+} \ No newline at end of file
diff --git a/ext/opcache/tests/bug78937_6.phpt b/ext/opcache/tests/bug78937_6.phpt
new file mode 100644
index 0000000000..28dcb0ce53
--- /dev/null
+++ b/ext/opcache/tests/bug78937_6.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #78937.6 (Preloading unlinkable anonymous class can segfault)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.preload={PWD}/preload_bug78937.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+include(__DIR__ . "/preload_bug78937.inc");
+bar();
+var_dump(new Foo);
+?>
+--EXPECTF--
+Warning: Can't preload unlinked class Foo: Unknown parent Bar in %spreload_bug78937.inc on line 6
+
+Warning: Can't preload unlinked class class@anonymous: Unknown parent Bar in %spreload_bug78937.inc on line 3
+
+Fatal error: Uncaught Error: Class 'Bar' not found in %spreload_bug78937.inc:6
+Stack trace:
+#0 %sbug78937_6.php(3): bar()
+#1 {main}
+ thrown in %spreload_bug78937.inc on line 6
diff --git a/ext/opcache/tests/preload_bug78937.inc b/ext/opcache/tests/preload_bug78937.inc
new file mode 100644
index 0000000000..7da2dc3227
--- /dev/null
+++ b/ext/opcache/tests/preload_bug78937.inc
@@ -0,0 +1,8 @@
+<?php
+function foo() {
+ return new class extends Bar {};
+}
+function bar() {
+ class Foo extends Bar {
+ }
+}