Hi! While working on upgrading php-v8 extension from 6.5.144 to 6.6.275 I find a strange issue: when promise in non-pending stage get resolved/rejected, application fails with segfault. While it's an edge case, it still possible in userland and luckily it was covered by php-v8 unit tests. As v8 API says that calling resolve/reject on a promise in non-pending state should have no effect, I find this segfault a bit strange. Could it be some regression or so?
Here's minimal example to reproduce the issue: hello_world.cpp #include <v8.h> #include <libplatform/libplatform.h> #include <stdlib.h> #include <string.h> using namespace v8; int main(int argc, char* argv[]) { // Initialize V8. //v8::V8::InitializeICU(); std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform (); v8::V8::InitializePlatform(platform.get()); V8::Initialize(); v8::Isolate::CreateParams create_params; create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator:: NewDefaultAllocator(); // Create a new Isolate and make it the current one. Isolate* isolate = v8::Isolate::New(create_params); v8::Persistent<v8::String> test; { Isolate::Scope isolate_scope(isolate); // Create a stack-allocated handle scope. HandleScope handle_scope(isolate); // Create a new context. Local<Context> context = Context::New(isolate); // Enter the context for compiling and running the hello world script. Context::Scope context_scope(context); Local<String> local_value = String::NewFromUtf8(isolate, "test"); v8::MaybeLocal<v8::Promise::Resolver> maybe_local_resolver = v8::Promise ::Resolver::New(context); v8::Local<v8::Promise::Resolver> local_resolver = maybe_local_resolver. ToLocalChecked(); local_resolver->Resolve(context, local_value); local_resolver->Resolve(context, local_value); } // Dispose the isolate and tear down V8. isolate->Dispose(); V8::Dispose(); V8::ShutdownPlatform(); return 0; } Build on macOS with ROOT=/usr/local/opt/v8@6.6 LIB_DIR=$ROOT/lib/ SRC_DIR=$ROOT INCLUDE_DIR=$ROOT/include g++ hello_world.cpp -o hello_world \ -Wno-unused-result \ -g \ -O2 \ -std=c++14 \ -I$SRC_DIR \ -I$INCLUDE_DIR \ -L$LIB_DIR \ -lv8_libbase \ -lv8_libplatform \ -lv8 \ -lpthread install_name_tool -add_rpath $LIB_DIR hello_world And fails with $ ./hello_world Received signal 11 SEGV_MAPERR 00000000000a ==== C stack trace =============================== [0x000106d8ff14] [0x7fff6ca6bf5a] [0x0001072d0984] [0x000106de95e8] [0x000106d79bb2] [0x7fff6c7ea115] [0x000000000001] [end of stack trace] Segmentation fault: 11 Same issue on linux - https://travis-ci.org/pinepain/php-v8/jobs/344550482 (scroll to the bottom). I would really appreciate any help here as I'm not quite sure whether it's an issue on my side or some regression/bug in v8. Regards, Bogdan -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.