Quellcode durchsuchen

Fix mistake of not copying the '\0' terminator for strings.

mingodad vor 13 Jahren
Ursprung
Commit
b58b077150
1 geänderte Dateien mit 12 neuen und 8 gelöschten Zeilen
  1. 12 8
      squirrel/sqbaselib.cpp

+ 12 - 8
squirrel/sqbaselib.cpp

@@ -1597,8 +1597,9 @@ static SQRESULT string_sl_len (HSQUIRRELVM v) {
 static SQRESULT string_sl_lower (HSQUIRRELVM v) {
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_STRING(v, 1, str);
-    SQChar *s = sq_getscratchpad(v, str_size);
-    memcpy(s, str, str_size);
+    SQInteger size = str_size+sizeof(SQChar); //'\0' terminator
+    SQChar *s = sq_getscratchpad(v, size);
+    memcpy(s, str, size);
     toLowerSubSetLatinUtf8(s);
     sq_pushstring(v, s, -1);
     return 1;
@@ -1608,8 +1609,9 @@ static SQRESULT string_sl_lower (HSQUIRRELVM v) {
 static SQRESULT string_sl_upper (HSQUIRRELVM v) {
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_STRING(v, 1, str);
-    SQChar *s = sq_getscratchpad(v, str_size);
-    memcpy(s, str, str_size);
+    SQInteger size = str_size+sizeof(SQChar); //'\0' terminator
+    SQChar *s = sq_getscratchpad(v, size);
+    memcpy(s, str, size);
     toUpperSubSetLatinUtf8(s);
     sq_pushstring(v, s, -1);
     return 1;
@@ -1618,8 +1620,9 @@ static SQRESULT string_sl_upper (HSQUIRRELVM v) {
 static SQRESULT string_sl_deaccent (HSQUIRRELVM v) {
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_STRING(v, 1, str);
-    SQChar *s = sq_getscratchpad(v, str_size);
-    memcpy(s, str, str_size);
+    SQInteger size = str_size+sizeof(SQChar); //'\0' terminator
+    SQChar *s = sq_getscratchpad(v, size);
+    memcpy(s, str, size);
     deAccentSubSetLatinUtf8(s);
     sq_pushstring(v, s, -1);
     return 1;
@@ -1628,8 +1631,9 @@ static SQRESULT string_sl_deaccent (HSQUIRRELVM v) {
 static SQRESULT string_sl_lower_deaccent (HSQUIRRELVM v) {
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_STRING(v, 1, str);
-    SQChar *s = sq_getscratchpad(v, str_size);
-    memcpy(s, str, str_size);
+    SQInteger size = str_size+sizeof(SQChar); //'\0' terminator
+    SQChar *s = sq_getscratchpad(v, size);
+    memcpy(s, str, size);
     toLowerDeaccentSubSetLatinUtf8(s);
     sq_pushstring(v, s, -1);
     return 1;