Thanks for the report. Fix out for review: https://chromium- review.googlesource.com/c/v8/v8/+/932968
On Thu, Feb 22, 2018 at 12:17 PM, Bogdan Padalko <zaq178mi...@gmail.com> wrote: > 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::NewDefaultPlatfo > rm(); > v8::V8::InitializePlatform(platform.get()); > > V8::Initialize(); > > v8::Isolate::CreateParams create_params; > create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::Ne > wDefaultAllocator(); > > // 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. > -- -- 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.