changeset 19264:e28c63bda1c2 draft

(svn r24153) -Fix [FS#5160]: [Squirrel] Crash when trying to create an array with negative size
author rubidium <rubidium@openttd.org>
date Wed, 18 Apr 2012 19:22:32 +0000
parents f4c9feb421ca
children 36921d3ba673
files src/3rdparty/squirrel/squirrel/sqbaselib.cpp
diffstat 1 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/3rdparty/squirrel/squirrel/sqbaselib.cpp
+++ b/src/3rdparty/squirrel/squirrel/sqbaselib.cpp
@@ -210,16 +210,22 @@
 static SQInteger base_array(HSQUIRRELVM v)
 {
 	SQArray *a;
-	SQObject &size = stack_get(v,2);
+	SQInteger nInitialSize = tointeger(stack_get(v,2));
+	SQInteger ret = 1;
+	if (nInitialSize < 0) {
+		v->Raise_Error(_SC("can't create/resize array with/to size %d"), nInitialSize);
+		nInitialSize = 0;
+		ret = -1;
+	}
 	if(sq_gettop(v) > 2) {
 		a = SQArray::Create(_ss(v),0);
-		a->Resize(tointeger(size),stack_get(v,3));
+		a->Resize(nInitialSize,stack_get(v,3));
 	}
 	else {
-		a = SQArray::Create(_ss(v),tointeger(size));
+		a = SQArray::Create(_ss(v),nInitialSize);
 	}
 	v->Push(a);
-	return 1;
+	return ret;
 }
 
 static SQInteger base_type(HSQUIRRELVM v)