From f768fd2b9d7f2816e431f7cd73f7c54c17742f03 Mon Sep 17 00:00:00 2001 From: Patrick Schneider Date: Thu, 13 Apr 2017 17:31:00 +0200 Subject: [PATCH] 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. --- Lib/javascript/v8/javascriptcode.swg | 6 ++++-- 1 file 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 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 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