diff --git a/deps/v8/src/runtime/runtime-object.cc b/deps/v8/src/runtime/runtime-object.cc index 79950c62184662..7b51b38aa07286 100644 --- a/deps/v8/src/runtime/runtime-object.cc +++ b/deps/v8/src/runtime/runtime-object.cc @@ -1387,6 +1387,8 @@ RUNTIME_FUNCTION(Runtime_DefineDataPropertyUnchecked) { CONVERT_PROPERTY_ATTRIBUTES_CHECKED(attrs, 3); LookupIterator it(js_object, name, LookupIterator::OWN_SKIP_INTERCEPTOR); + LookupIterator it_interceptor(js_object, name, LookupIterator::OWN); + if (it.IsFound() && it.state() == LookupIterator::ACCESS_CHECK) { if (!isolate->MayAccess(js_object)) { return isolate->heap()->undefined_value(); @@ -1407,6 +1409,16 @@ RUNTIME_FUNCTION(Runtime_DefineDataPropertyUnchecked) { return *result; } + // If there's an interceptor, try to store the property with the + // interceptor. + if (it_interceptor.state() == LookupIterator::INTERCEPTOR) { + Handle result; + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, result, + JSObject::SetPropertyWithInterceptor(&it_interceptor, obj_value)); + return *result; + } + Handle result; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( isolate, result, diff --git a/test/parallel/test-process-env.js b/test/parallel/test-process-env.js index 7e927d09bae668..e3efa592ea059b 100644 --- a/test/parallel/test-process-env.js +++ b/test/parallel/test-process-env.js @@ -50,6 +50,17 @@ if (process.argv[2] == 'you-are-the-child') { delete process.env.NODE_PROCESS_ENV_DELETED; assert.equal(false, 'NODE_PROCESS_ENV_DELETED' in process.env); + Object.defineProperty(process.env, 'NODE_PROCESS_ENV_DELETED', { + writable: true, + configurable: true, + enumerable: true, + value: 0 + }); + assert.equal(true, 'NODE_PROCESS_ENV_DELETED' in process.env); + + delete process.env.NODE_PROCESS_ENV_DELETED; + assert.equal(false, 'NODE_PROCESS_ENV_DELETED' in process.env); + var child = spawn(process.argv[0], [process.argv[1], 'you-are-the-child']); child.stdout.on('data', function(data) { console.log(data.toString()); }); child.stderr.on('data', function(data) { console.log(data.toString()); });