summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Schneider <patrick.schneider@meetnow.eu>2017-04-13 17:31:00 +0200
committerPatrick Schneider <patrick.schneider@meetnow.eu>2017-04-13 17:31:00 +0200
commitf768fd2b9d7f2816e431f7cd73f7c54c17742f03 (patch)
treed091dfe613c94caaaa37f97fcc45c3a868d4148a
parentc06c9b38538023482b5ac0670cb4db4bb1999070 (diff)
downloadswig-f768fd2b9d7f2816e431f7cd73f7c54c17742f03.tar.gz
Added check to prevent crash on illegal constructor call
Constructors not called as part of object instantiation (using "new" or via inheritance) will not crash the VM anymore.
-rw-r--r--Lib/javascript/v8/javascriptcode.swg6
1 files changed, 4 insertions, 2 deletions
diff --git a/Lib/javascript/v8/javascriptcode.swg b/Lib/javascript/v8/javascriptcode.swg
index fb7d55c2a..323a91cc5 100644
--- a/Lib/javascript/v8/javascriptcode.swg
+++ b/Lib/javascript/v8/javascriptcode.swg
@@ -10,9 +10,10 @@
%fragment("js_ctor", "templates") %{
static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args) {
SWIGV8_HANDLESCOPE();
-
+
v8::Handle<v8::Object> self = args.Holder();
$jslocals
+ if(self->InternalFieldCount() < 1) SWIG_exception_fail(SWIG_ERROR, "Illegal call of constructor $jswrapper.");
if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper.");
$jscode
@@ -77,9 +78,10 @@ fail:
%fragment("js_overloaded_ctor", "templates") %{
static SwigV8ReturnValue $jswrapper(const SwigV8Arguments &args, V8ErrorHandler &SWIGV8_ErrorHandler) {
SWIGV8_HANDLESCOPE();
-
+
v8::Handle<v8::Object> self = args.Holder();
$jslocals
+ if(self->InternalFieldCount() < 1) SWIG_exception_fail(SWIG_ERROR, "Illegal call of constructor $jswrapper.");
if(args.Length() != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper.");
$jscode