fci.retval = &retval;
called_scope = zend_get_called_scope(execute_data);
- if (called_scope &&
+ if (called_scope && fci_cache.calling_scope &&
instanceof_function(called_scope, fci_cache.calling_scope)) {
fci_cache.called_scope = called_scope;
}
fci.retval = &retval;
called_scope = zend_get_called_scope(execute_data);
- if (called_scope &&
+ if (called_scope && fci_cache.calling_scope &&
instanceof_function(called_scope, fci_cache.calling_scope)) {
fci_cache.called_scope = called_scope;
}
--- /dev/null
+--TEST--
+Bug #71442 (forward_static_call crash)
+--FILE--
+<?php
+
+class A
+{
+ const NAME = 'A';
+ public static function test() {
+ $args = func_get_args();
+ echo static::NAME, " ".join(',', $args)." \n";
+ }
+}
+
+class B extends A
+{
+ const NAME = 'B';
+
+ public static function test() {
+ echo self::NAME, "\n";
+ forward_static_call(array('A', 'test'), 'more', 'args');
+ forward_static_call( 'test', 'other', 'args');
+ }
+}
+
+B::test('foo');
+
+function test() {
+ $args = func_get_args();
+ echo "C ".join(',', $args)." \n";
+}
+
+?>
+--EXPECT--
+B
+B more,args
+C other,args