diff options
author | Patrick Schneider <patrick.schneider@meetnow.eu> | 2017-04-13 17:31:00 +0200 |
---|---|---|
committer | Patrick Schneider <patrick.schneider@meetnow.eu> | 2017-04-13 17:31:00 +0200 |
commit | f768fd2b9d7f2816e431f7cd73f7c54c17742f03 (patch) | |
tree | d091dfe613c94caaaa37f97fcc45c3a868d4148a | |
parent | c06c9b38538023482b5ac0670cb4db4bb1999070 (diff) | |
download | swig-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.swg | 6 |
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 |