Преглед изворни кода

Changed the check on walking through the format string to use it's size instead of find the '\0' char, this allows format string with embedded '\0' chars.

mingodad пре 13 година
родитељ
комит
2fa04324bb
1 измењених фајлова са 4 додато и 3 уклоњено
  1. 4 3
      sqstdlib/sqstdstring.cpp

+ 4 - 3
sqstdlib/sqstdstring.cpp

@@ -70,11 +70,12 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
 	const SQChar *format;
 	const SQChar *format;
 	SQChar *dest;
 	SQChar *dest;
 	SQChar fmt[MAX_FORMAT_LEN];
 	SQChar fmt[MAX_FORMAT_LEN];
-	sq_getstring(v,nformatstringidx,&format);
-	SQInteger allocated = (sq_getsize(v,nformatstringidx)+2)*sizeof(SQChar);
+	sq_getstring(v,nformatstringidx,&format);
+	SQInteger format_size = sq_getsize(v,nformatstringidx);
+	SQInteger allocated = (format_size+2)*sizeof(SQChar);
 	dest = sq_getscratchpad(v,allocated);
 	dest = sq_getscratchpad(v,allocated);
 	SQInteger n = 0,i = 0, nparam = nformatstringidx+1, w = 0;
 	SQInteger n = 0,i = 0, nparam = nformatstringidx+1, w = 0;
-	while(format[n] != '\0') {
+	while(n < format_size) {
 		if(format[n] != '%') {
 		if(format[n] != '%') {
 			assert(i < allocated);
 			assert(i < allocated);
 			dest[i++] = format[n];
 			dest[i++] = format[n];