浏览代码

Fix BitVector extension to check for 1 based index.

mingodad 8 年之前
父节点
当前提交
003b35056f
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      SquiLu-ext/sq_bitvector.cpp

+ 7 - 1
SquiLu-ext/sq_bitvector.cpp

@@ -428,15 +428,18 @@ static SQRESULT sq_BitVector_constructor(HSQUIRRELVM v){
 	return rc;
 }
 
+#define BV_CHECK_RANGE() \
+    	if(int_pos < 1 || int_pos > self->iSize) return sq_throwerror(v, _SC("index out of range '%u'"), (u32)int_pos);
 static SQRESULT sq_BitVector_clear(HSQUIRRELVM v){
 	SQ_FUNC_VARS_NO_TOP(v);
 	GET_BitVector_INSTANCE();
 
 	SQ_GET_INTEGER(v, 2, int_pos);
+	BV_CHECK_RANGE();
 //	void sqlite3BitvecClear(Bitvec*, u32, void*)
     SQChar *bv_buf = sq_getscratchpad(v, sqlite3BITVEC_SZ());
 
-    sqlite3BitvecClear(self, int_pos, bv_buf);
+    sqlite3BitvecClear(self, (u32)int_pos, bv_buf);
 	return 0;
 }
 
@@ -445,6 +448,7 @@ static SQRESULT sq_BitVector_set(HSQUIRRELVM v){
 	GET_BitVector_INSTANCE();
 
 	SQ_GET_INTEGER(v, 2, int_pos);
+	BV_CHECK_RANGE();
 //	int sqlite3BitvecSet(Bitvec*, u32)
     sq_pushinteger(v, sqlite3BitvecSet(self, (u32)int_pos));
 	return 1;
@@ -464,6 +468,7 @@ static SQRESULT sq_BitVector_test(HSQUIRRELVM v){
 	GET_BitVector_INSTANCE();
 
 	SQ_GET_INTEGER(v, 2, int_pos);
+	BV_CHECK_RANGE();
 //	int sqlite3BitvecTest(Bitvec*, u32)
     sq_pushinteger(v, sqlite3BitvecTest(self, (u32)int_pos));
 	return 1;
@@ -474,6 +479,7 @@ static SQRESULT sq_BitVector_test_not_null(HSQUIRRELVM v){
 	GET_BitVector_INSTANCE();
 
 	SQ_GET_INTEGER(v, 2, int_pos);
+	BV_CHECK_RANGE();
 //	int sqlite3BitvecTestNotNull(Bitvec*, u32)
     sq_pushinteger(v, sqlite3BitvecTestNotNull(self, (u32)int_pos));
 	return 1;