mirror of
https://github.com/phpv8/v8js.git
synced 2024-12-22 18:41:52 +00:00
Merge branch 'php8-exit_segfault' of https://github.com/chrisbckr/v8js into php8
Conflicts: v8js_object_export.cc
This commit is contained in:
commit
8aa6bc2357
37
tests/issue_497_001.phpt
Normal file
37
tests/issue_497_001.phpt
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
--TEST--
|
||||||
|
Test V8::executeString() : Issue #497 (segmentation fault calling PHP exit inside object function)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
class Foo {
|
||||||
|
function __destruct() {
|
||||||
|
var_dump('Foo __destruct');
|
||||||
|
}
|
||||||
|
|
||||||
|
function somecall() {
|
||||||
|
var_dump('Foo somecall');
|
||||||
|
}
|
||||||
|
|
||||||
|
function bar() {
|
||||||
|
global $v8;
|
||||||
|
var_dump('Foo bar');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$v8 = new \V8Js();
|
||||||
|
$v8->foo = new Foo();
|
||||||
|
|
||||||
|
$JS = <<< EOT
|
||||||
|
PHP.foo.somecall();
|
||||||
|
PHP.foo.bar();
|
||||||
|
EOT;
|
||||||
|
|
||||||
|
$v8->executeString($JS, '', \V8JS::FLAG_PROPAGATE_PHP_EXCEPTIONS);
|
||||||
|
echo 'Not here!!';
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
string(12) "Foo somecall"
|
||||||
|
string(7) "Foo bar"
|
||||||
|
string(14) "Foo __destruct"
|
@ -38,7 +38,7 @@ v8::Local<v8::Value> v8js_propagate_exception(v8js_ctx *ctx) /* {{{ */
|
|||||||
{
|
{
|
||||||
v8::Local<v8::Value> return_value = v8::Null(ctx->isolate);
|
v8::Local<v8::Value> return_value = v8::Null(ctx->isolate);
|
||||||
|
|
||||||
if (!(ctx->flags & V8JS_FLAG_PROPAGATE_PHP_EXCEPTIONS)) {
|
if (!(ctx->flags & V8JS_FLAG_PROPAGATE_PHP_EXCEPTIONS) || zend_is_graceful_exit(EG(exception)) || zend_is_unwind_exit(EG(exception))) {
|
||||||
v8js_terminate_execution(ctx->isolate);
|
v8js_terminate_execution(ctx->isolate);
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user