summaryrefslogtreecommitdiff
path: root/ext/opcache
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache')
-rw-r--r--ext/opcache/jit/zend_jit_x86.dasc5
-rw-r--r--ext/opcache/tests/jit/bug80634.phpt22
-rw-r--r--ext/opcache/tests/jit/preload_bug80634.inc10
3 files changed, 36 insertions, 1 deletions
diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc
index 5ff3c05034..91038b1be4 100644
--- a/ext/opcache/jit/zend_jit_x86.dasc
+++ b/ext/opcache/jit/zend_jit_x86.dasc
@@ -12626,7 +12626,10 @@ static zend_property_info* zend_get_known_property_info(zend_class_entry *ce, ze
{
zend_property_info *info = NULL;
- if (!ce || !(ce->ce_flags & ZEND_ACC_LINKED) || (ce->ce_flags & ZEND_ACC_TRAIT)) {
+ if (!ce ||
+ !(ce->ce_flags & ZEND_ACC_LINKED) ||
+ (ce->ce_flags & ZEND_ACC_TRAIT) ||
+ ce->create_object) {
return NULL;
}
diff --git a/ext/opcache/tests/jit/bug80634.phpt b/ext/opcache/tests/jit/bug80634.phpt
new file mode 100644
index 0000000000..579adda0e3
--- /dev/null
+++ b/ext/opcache/tests/jit/bug80634.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #80634 (write_property handler of internal classes is skipped on preloaded JITted code)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.file_update_protection=0
+opcache.jit_buffer_size=1M
+opcache.protect_memory=1
+opcache.jit=function
+opcache.preload={PWD}/preload_bug80634.inc
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$v = new SomeClass(5);
+?>
+--EXPECTF--
+Fatal error: Uncaught Error: Writing to DatePeriod->interval is unsupported in %spreload_bug80634.inc:7
+Stack trace:
+#0 %sbug80634.php(2): SomeClass->__construct(5)
+#1 {main}
+ thrown in %spreload_bug80634.inc on line 7 \ No newline at end of file
diff --git a/ext/opcache/tests/jit/preload_bug80634.inc b/ext/opcache/tests/jit/preload_bug80634.inc
new file mode 100644
index 0000000000..feee9ec970
--- /dev/null
+++ b/ext/opcache/tests/jit/preload_bug80634.inc
@@ -0,0 +1,10 @@
+<?php
+class SomeClass extends \DatePeriod {
+ public $interval;
+
+ public function __construct(int $v) {
+ parent::__construct(new \DateTime('2020-12-31'), new \DateInterval("P1Y"), 1);
+ $this->interval = $v;
+ var_dump($this->interval);
+ }
+} \ No newline at end of file