Skip to content

Commit

Permalink
src, test: fixup after v8 update
Browse files Browse the repository at this point in the history
Because of behavior change of some V8 APIs (they mostly became more
    strict), following modules needed to be fixed:

* crypto: duplicate prototype methods are not allowed anymore
* contextify: some TryCatch trickery, the binding was using it
incorrectly
* util: maximum call stack error is now crashing in a different place

Reviewed-By: Trevor Norris <trevnorris@gmail.com>
PR-URL: nodejs/node-v0.x-archive#8476
  • Loading branch information
indutny committed Oct 8, 2014
1 parent 3821863 commit 383b0c0
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 35 deletions.
4 changes: 2 additions & 2 deletions common.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@
}],
['GENERATOR == "ninja" or OS== "mac"', {
'OBJ_DIR': '<(PRODUCT_DIR)/obj',
'V8_BASE': '<(PRODUCT_DIR)/libv8_base.<(target_arch).a',
'V8_BASE': '<(PRODUCT_DIR)/libv8_base.a',
}, {
'OBJ_DIR': '<(PRODUCT_DIR)/obj.target',
'V8_BASE': '<(PRODUCT_DIR)/obj.target/deps/v8/tools/gyp/libv8_base.<(target_arch).a',
'V8_BASE': '<(PRODUCT_DIR)/obj.target/deps/v8/tools/gyp/libv8_base.a',
}],
],
},
Expand Down
5 changes: 3 additions & 2 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2603,7 +2603,7 @@ void StopProfilerIdleNotifier(const FunctionCallbackInfo<Value>& args) {

#define READONLY_PROPERTY(obj, str, var) \
do { \
obj->Set(OneByteString(env->isolate(), str), var, v8::ReadOnly); \
obj->ForceSet(OneByteString(env->isolate(), str), var, v8::ReadOnly); \
} while (0)


Expand Down Expand Up @@ -3483,7 +3483,8 @@ void Init(int* argc,

// Fetch a reference to the main isolate, so we have a reference to it
// even when we need it to access it from another (debugger) thread.
node_isolate = Isolate::GetCurrent();
node_isolate = Isolate::New();
Isolate::Scope isolate_scope(node_isolate);

#ifdef __POSIX__
// Raise the open file descriptor limit.
Expand Down
2 changes: 1 addition & 1 deletion src/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ NODE_EXTERN void RunAtExit(Environment* env);
v8::Number::New(isolate, static_cast<double>(constant)); \
v8::PropertyAttribute constant_attributes = \
static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
(target)->Set(constant_name, constant_value, constant_attributes); \
(target)->ForceSet(constant_name, constant_value, constant_attributes); \
} \
while (0)

Expand Down
6 changes: 3 additions & 3 deletions src/node_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -624,9 +624,9 @@ void SetupBufferJS(const FunctionCallbackInfo<Value>& args) {
NODE_SET_METHOD(proto, "copy", Copy);

// for backwards compatibility
proto->Set(env->offset_string(),
Uint32::New(env->isolate(), 0),
v8::ReadOnly);
proto->ForceSet(env->offset_string(),
Uint32::New(env->isolate(), 0),
v8::ReadOnly);

assert(args[1]->IsObject());

Expand Down
42 changes: 28 additions & 14 deletions src/node_contextify.cc
Original file line number Diff line number Diff line change
Expand Up @@ -537,18 +537,24 @@ class ContextifyScript : public BaseObject {
Environment* env = Environment::GetCurrent(args.GetIsolate());
HandleScope scope(env->isolate());

int64_t timeout;
bool display_errors;

// Assemble arguments
TryCatch try_catch;
if (!args[0]->IsObject()) {
return env->ThrowTypeError(
"contextifiedSandbox argument must be an object.");
}

Local<Object> sandbox = args[0].As<Object>();
int64_t timeout = GetTimeoutArg(args, 1);
bool display_errors = GetDisplayErrorsArg(args, 1);
if (try_catch.HasCaught()) {
try_catch.ReThrow();
return;
{
TryCatch try_catch;
timeout = GetTimeoutArg(args, 1);
display_errors = GetDisplayErrorsArg(args, 1);
if (try_catch.HasCaught()) {
try_catch.ReThrow();
return;
}
}

// Get the context from the sandbox
Expand All @@ -563,14 +569,22 @@ class ContextifyScript : public BaseObject {
if (contextify_context->context().IsEmpty())
return;

// Do the eval within the context
Context::Scope context_scope(contextify_context->context());
if (EvalMachine(contextify_context->env(),
timeout,
display_errors,
args,
try_catch)) {
contextify_context->CopyProperties();
{
TryCatch try_catch;
// Do the eval within the context
Context::Scope context_scope(contextify_context->context());
if (EvalMachine(contextify_context->env(),
timeout,
display_errors,
args,
try_catch)) {
contextify_context->CopyProperties();
}

if (try_catch.HasCaught()) {
try_catch.ReThrow();
return;
}
}
}

Expand Down
14 changes: 4 additions & 10 deletions src/node_crypto.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1022,9 +1022,12 @@ void SSLWrap<Base>::AddMethods(Environment* env, Handle<FunctionTemplate> t) {

#ifdef OPENSSL_NPN_NEGOTIATED
NODE_SET_PROTOTYPE_METHOD(t, "getNegotiatedProtocol", GetNegotiatedProto);
NODE_SET_PROTOTYPE_METHOD(t, "setNPNProtocols", SetNPNProtocols);
#endif // OPENSSL_NPN_NEGOTIATED

#ifdef OPENSSL_NPN_NEGOTIATED
NODE_SET_PROTOTYPE_METHOD(t, "setNPNProtocols", SetNPNProtocols);
#endif

NODE_SET_EXTERNAL(
t->PrototypeTemplate(),
"_external",
Expand Down Expand Up @@ -2057,15 +2060,6 @@ void Connection::Initialize(Environment* env, Handle<Object> target) {

SSLWrap<Connection>::AddMethods(env, t);

#ifdef OPENSSL_NPN_NEGOTIATED
NODE_SET_PROTOTYPE_METHOD(t,
"getNegotiatedProtocol",
Connection::GetNegotiatedProto);
NODE_SET_PROTOTYPE_METHOD(t,
"setNPNProtocols",
Connection::SetNPNProtocols);
#endif


#ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
NODE_SET_PROTOTYPE_METHOD(t, "getServername", Connection::GetServername);
Expand Down
2 changes: 2 additions & 0 deletions src/util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Utf8Value::Utf8Value(v8::Handle<v8::Value> value)
return;

v8::Local<v8::String> val_ = value->ToString();
if (val_.IsEmpty())
return;

// Allocate enough space to include the null terminator
size_t len = StringBytes::StorageSize(val_, UTF8) + 1;
Expand Down
2 changes: 1 addition & 1 deletion test/simple/test-abort-fatal-error.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ if (process.platform === 'win32') {
var exec = require('child_process').exec;

var cmdline = 'ulimit -c 0; ' + process.execPath;
cmdline += ' --max-old-space-size=4 --max-new-space-size=1';
cmdline += ' --max-old-space-size=4 --max-semi-space-size=1';
cmdline += ' -e "a = []; for (i = 0; i < 1e9; i++) { a.push({}) }"';

exec(cmdline, function(err, stdout, stderr) {
Expand Down
2 changes: 0 additions & 2 deletions test/simple/test-vm-harmony-symbols.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

// Flags: --harmony_symbols

var common = require('../common');
var assert = require('assert');
var vm = require('vm');
Expand Down

0 comments on commit 383b0c0

Please sign in to comment.