Skip to content

Commit 578b785

Browse files
committed
Don't return reference from Fiber::getReturn()
Even if the fiber function returns by reference, we must return a value from Fiber::getReturn() to satisfy the function signature. Fixes oss-fuzz #36417.
1 parent 6d505d4 commit 578b785

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

Zend/tests/fibers/return-by-ref.phpt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
Fiber function may return by ref, but getReturn() always returns by val
3+
--FILE--
4+
<?php
5+
6+
$fiber = new Fiber(function &() {
7+
Fiber::suspend();
8+
return $var;
9+
});
10+
11+
$fiber->start();
12+
$fiber->resume();
13+
var_dump($fiber->getReturn());
14+
15+
?>
16+
--EXPECT--
17+
NULL

Zend/zend_fibers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ ZEND_METHOD(Fiber, getReturn)
832832
} else if (fiber->flags & ZEND_FIBER_FLAG_BAILOUT) {
833833
message = "The fiber exited with a fatal error";
834834
} else {
835-
RETURN_COPY(&fiber->result);
835+
RETURN_COPY_DEREF(&fiber->result);
836836
}
837837
} else if (fiber->context.status == ZEND_FIBER_STATUS_INIT) {
838838
message = "The fiber has not been started";

0 commit comments

Comments
 (0)