From f9688bde15f240ba8e34b2e09e861d516a893632 Mon Sep 17 00:00:00 2001
From: Roman Klauke <romaaan.git@gmail.com>
Date: Thu, 7 May 2015 20:27:12 +0200
Subject: [PATCH] v8: add type check to make failed calls visible

Calling v8.setFlagsFromString with e.g a function as a flag
argument gave no exception or warning that the function call will
fail. There is now an exception if the function gets called with
the wrong flag type (string is required) or that a flag is
expected.
Other APIs already provide exceptions if the argument has
not the expected type.
---
 doc/api/v8.markdown                      | 2 +-
 src/node_v8.cc                           | 7 +++++++
 test/parallel/test-v8-flag-type-check.js | 6 ++++++
 3 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 test/parallel/test-v8-flag-type-check.js

diff --git a/doc/api/v8.markdown b/doc/api/v8.markdown
index adced82685eea4..cedd5c86d9b008 100644
--- a/doc/api/v8.markdown
+++ b/doc/api/v8.markdown
@@ -20,7 +20,7 @@ Returns an object with the following properties
 }
 ```
 
-## setFlagsFromString()
+## setFlagsFromString(string)
 
 Set additional V8 command line flags.  Use with care; changing settings
 after the VM has started may result in unpredictable behavior, including
diff --git a/src/node_v8.cc b/src/node_v8.cc
index f3bdda409d0f6e..2834a21496bbdb 100644
--- a/src/node_v8.cc
+++ b/src/node_v8.cc
@@ -60,6 +60,13 @@ void GetHeapStatistics(const FunctionCallbackInfo<Value>& args) {
 
 
 void SetFlagsFromString(const FunctionCallbackInfo<Value>& args) {
+  Environment* env = Environment::GetCurrent(args);
+
+  if (args.Length() < 1)
+    return env->ThrowTypeError("v8 flag is required");
+  if (!args[0]->IsString())
+    return env->ThrowTypeError("v8 flag must be a string");
+
   String::Utf8Value flags(args[0]);
   V8::SetFlagsFromString(*flags, flags.length());
 }
diff --git a/test/parallel/test-v8-flag-type-check.js b/test/parallel/test-v8-flag-type-check.js
new file mode 100644
index 00000000000000..1bb501df43606c
--- /dev/null
+++ b/test/parallel/test-v8-flag-type-check.js
@@ -0,0 +1,6 @@
+var common = require('../common');
+var assert = require('assert');
+var v8 = require('v8');
+
+assert.throws(function() {v8.setFlagsFromString(1)}, TypeError);
+assert.throws(function() {v8.setFlagsFromString()}, TypeError);