mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
Fixed bug #69212
This commit is contained in:
parent
c814b3294a
commit
bc9f2fb8df
4 changed files with 37 additions and 0 deletions
2
NEWS
2
NEWS
|
@ -8,6 +8,8 @@ PHP NEWS
|
||||||
. Fixed bug #67626 (User exceptions not properly handled in streams).
|
. Fixed bug #67626 (User exceptions not properly handled in streams).
|
||||||
(Julian)
|
(Julian)
|
||||||
. Fixed bug #68917 (parse_url fails on some partial urls). (Wei Dai)
|
. Fixed bug #68917 (parse_url fails on some partial urls). (Wei Dai)
|
||||||
|
. Fixed bug #69212 (Leaking VIA_HANDLER func when exception thrown in
|
||||||
|
__call/... arg passing). (Nikita)
|
||||||
|
|
||||||
- Filter:
|
- Filter:
|
||||||
. Fixed bug #69202: (FILTER_FLAG_STRIP_BACKTICK ignored unless other
|
. Fixed bug #69202: (FILTER_FLAG_STRIP_BACKTICK ignored unless other
|
||||||
|
|
27
Zend/tests/bug69212.phpt
Normal file
27
Zend/tests/bug69212.phpt
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #69212: Leaking VIA_HANDLER func when exception thrown in __call/... arg passing
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
public static function __callStatic($method, $args) {}
|
||||||
|
public function __call($method, $args) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function do_throw() { throw new Exception; }
|
||||||
|
|
||||||
|
try {
|
||||||
|
Test::foo(do_throw());
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo "Caught!\n";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
(new Test)->bar(do_throw());
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo "Caught!\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
Caught!
|
||||||
|
Caught!
|
|
@ -5042,6 +5042,10 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
|
||||||
}
|
}
|
||||||
zval_ptr_dtor(&call->object);
|
zval_ptr_dtor(&call->object);
|
||||||
}
|
}
|
||||||
|
if (call->fbc->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||||
|
efree((char *) call->fbc->common.function_name);
|
||||||
|
efree(call->fbc);
|
||||||
|
}
|
||||||
call--;
|
call--;
|
||||||
} while (call >= EX(call_slots));
|
} while (call >= EX(call_slots));
|
||||||
EX(call) = NULL;
|
EX(call) = NULL;
|
||||||
|
|
|
@ -1022,6 +1022,10 @@ static int ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER
|
||||||
}
|
}
|
||||||
zval_ptr_dtor(&call->object);
|
zval_ptr_dtor(&call->object);
|
||||||
}
|
}
|
||||||
|
if (call->fbc->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||||
|
efree((char *) call->fbc->common.function_name);
|
||||||
|
efree(call->fbc);
|
||||||
|
}
|
||||||
call--;
|
call--;
|
||||||
} while (call >= EX(call_slots));
|
} while (call >= EX(call_slots));
|
||||||
EX(call) = NULL;
|
EX(call) = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue