src, test: fixup after v8 update
authorFedor Indutny <fedor@indutny.com>
Wed, 8 Oct 2014 10:34:51 +0000 (14:34 +0400)
committerFedor Indutny <fedor@indutny.com>
Wed, 8 Oct 2014 11:44:40 +0000 (15:44 +0400)
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: https://github.com/joyent/node/pull/8476

common.gypi
src/node.cc
src/node.h
src/node_buffer.cc
src/node_contextify.cc
src/node_crypto.cc
src/util.cc
test/simple/test-abort-fatal-error.js
test/simple/test-vm-harmony-symbols.js

index 6aa485b..8886b74 100644 (file)
       }],
       ['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',
       }],
     ],
   },
index 1736f9f..db22ea9 100644 (file)
@@ -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)
 
 
@@ -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.
index ca7cec0..384b790 100644 (file)
@@ -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)
 
index 822c4f8..cd66a8a 100644 (file)
@@ -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());
 
index bb43536..3f190a4 100644 (file)
@@ -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
@@ -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;
+      }
     }
   }
 
index 44ed4e0..7a35314 100644 (file)
@@ -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",
@@ -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);
index 7459dbb..67c9664 100644 (file)
@@ -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;
index 64d31d9..79e3d72 100644 (file)
@@ -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) {
index 4aa4161..200084f 100644 (file)
@@ -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');