A few fixes for Squirrel unchecked return values
authorTobias Markus <tobbi@mozilla-uk.org>
Sat, 21 Mar 2015 22:47:44 +0000 (23:47 +0100)
committerTobias Markus <tobbi@mozilla-uk.org>
Sat, 21 Mar 2015 22:47:44 +0000 (23:47 +0100)
external/squirrel/patches/patch5.patch [new file with mode: 0644]

diff --git a/external/squirrel/patches/patch5.patch b/external/squirrel/patches/patch5.patch
new file mode 100644 (file)
index 0000000..af869f5
--- /dev/null
@@ -0,0 +1,76 @@
+diff --git a/external/squirrel/sqstdlib/sqstdstream.cpp b/external/squirrel/sqstdlib/sqstdstream.cpp
+index 1b7a08f..af866a8 100644
+--- a/external/squirrel/sqstdlib/sqstdstream.cpp
++++ b/external/squirrel/sqstdlib/sqstdstream.cpp
+@@ -258,7 +258,11 @@ void init_streamclass(HSQUIRRELVM v)
+       sq_pushstring(v,_SC("std_stream"),-1);\r
+       if(SQ_FAILED(sq_get(v,-2))) {\r
+               sq_pushstring(v,_SC("std_stream"),-1);\r
+-              sq_newclass(v,SQFalse);\r
++              if(SQ_FAILED(sq_newclass(v,SQFalse)))\r
++              {\r
++                throw "Failed to create new std_stream class";\r
++                return;\r
++              }\r
+               sq_settypetag(v,-1,(SQUserPointer)SQSTD_STREAM_TYPE_TAG);\r
+               SQInteger i = 0;\r
+               while(_stream_methods[i].name != 0) {\r
+@@ -266,10 +270,16 @@ void init_streamclass(HSQUIRRELVM v)
+                       sq_pushstring(v,f.name,-1);\r
+                       sq_newclosure(v,f.f,0);\r
+                       sq_setparamscheck(v,f.nparamscheck,f.typemask);\r
+-                      sq_newslot(v,-3,SQFalse);\r
++                      if(SQ_FAILED(sq_newslot(v,-3,SQFalse))\r
++                        {\r
++                           throw "Failed to create new table slot for stream_method";\r
++                        }\r
+                       i++;\r
+               }\r
+-              sq_newslot(v,-3,SQFalse);\r
++              if(SQ_FAILED(sq_newslot(v,-3,SQFalse))\r
++                {\r
++                  throw "Failed to create new table slot for stream";\r
++                }\r
+               sq_pushroottable(v);\r
+               sq_pushstring(v,_SC("stream"),-1);\r
+               sq_pushstring(v,_SC("std_stream"),-1);\r
+@@ -306,7 +316,10 @@ SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,c
+                       sq_newslot(v,-3,SQFalse);\r
+                       i++;\r
+               }\r
+-              sq_newslot(v,-3,SQFalse);\r
++              if(SQ_FAILED(sq_newslot(v,-3,SQFalse))\r
++                {\r
++                  throw "Failed to create new table slot"\r
++                }\r
+               sq_pop(v,1);\r
+               \r
+               i = 0;\r
+@@ -317,7 +330,10 @@ SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,c
+                       sq_newclosure(v,f.f,0);\r
+                       sq_setparamscheck(v,f.nparamscheck,f.typemask);\r
+                       sq_setnativeclosurename(v,-1,f.name);\r
+-                      sq_newslot(v,-3,SQFalse);\r
++                      if(SQ_FAILED(sq_newslot(v,-3,SQFalse))\r
++                        {\r
++                          throw "Failed to create new table slot for global";\r
++                        }\r
+                       i++;\r
+               }\r
+               //register the class in the target table\r
+diff --git a/external/squirrel/sqstdlib/sqstdsystem.cpp b/external/squirrel/sqstdlib/sqstdsystem.cpp
+index 40f78d7..b5359b6 100644
+--- a/external/squirrel/sqstdlib/sqstdsystem.cpp
++++ b/external/squirrel/sqstdlib/sqstdsystem.cpp
+@@ -140,7 +140,10 @@ SQInteger sqstd_register_systemlib(HSQUIRRELVM v)
+               sq_newclosure(v,systemlib_funcs[i].f,0);\r
+               sq_setparamscheck(v,systemlib_funcs[i].nparamscheck,systemlib_funcs[i].typemask);\r
+               sq_setnativeclosurename(v,-1,systemlib_funcs[i].name);\r
+-              sq_newslot(v,-3,SQFalse);\r
++              if(SQ_FAILED(sq_newslot(v,-3,SQFalse))\r
++              {\r
++                // Could not create table slot\r
++              }\r
+               i++;\r
+       }\r
+       return 1;\r