summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2009-02-02 13:46:26 +0000
committerglx <glx@openttd.org>2009-02-02 13:46:26 +0000
commit6d6e2232ead8bd13b7e302f60793809f0e39ac0d (patch)
tree94d8b8fbeab32306eb82d2bdbbf2605b3372c849
parentc6bc3b869224212bf3556f44aec36052d2d7d0db (diff)
downloadopenttd-6d6e2232ead8bd13b7e302f60793809f0e39ac0d.tar.xz
(svn r15316) -Fix [NoAI]: ignore unprintable chars when returning a string to squirrel
-rw-r--r--src/script/squirrel_helper.hpp5
-rw-r--r--src/string.cpp4
-rw-r--r--src/string_func.h2
3 files changed, 6 insertions, 5 deletions
diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp
index 67baf7c51..73daeb5d5 100644
--- a/src/script/squirrel_helper.hpp
+++ b/src/script/squirrel_helper.hpp
@@ -9,6 +9,7 @@
#include "../core/math_func.hpp"
#include "../core/smallvec_type.hpp"
#include "../economy_type.h"
+#include "../string_func.h"
#include "squirrel_helper_type.hpp"
/**
@@ -79,8 +80,8 @@ namespace SQConvert {
template <> inline int Return<int64> (HSQUIRRELVM vm, int64 res) { sq_pushinteger(vm, ClampToI32(res)); return 1; }
template <> inline int Return<Money> (HSQUIRRELVM vm, Money res) { sq_pushinteger(vm, ClampToI32(res)); return 1; }
template <> inline int Return<bool> (HSQUIRRELVM vm, bool res) { sq_pushbool (vm, res); return 1; }
- template <> inline int Return<char *> (HSQUIRRELVM vm, char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); free(res); return 1; }
- template <> inline int Return<const char *>(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); return 1; }
+ template <> inline int Return<char *> (HSQUIRRELVM vm, char *res) { if (res == NULL) sq_pushnull(vm); else {str_validate(res, false, true); sq_pushstring (vm, OTTD2FS(res), strlen(res)); free(res);} return 1; }
+ template <> inline int Return<const char *>(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else {str_validate((char*)res, false, true); sq_pushstring (vm, OTTD2FS(res), strlen(res));} return 1; }
template <> inline int Return<void *> (HSQUIRRELVM vm, void *res) { sq_pushuserpointer(vm, res); return 1; }
/**
diff --git a/src/string.cpp b/src/string.cpp
index 7a2f1aabb..8b22937ae 100644
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -97,7 +97,7 @@ char *CDECL str_fmt(const char *str, ...)
}
-void str_validate(char *str, bool allow_newlines)
+void str_validate(char *str, bool allow_newlines, bool ignore)
{
char *dst = str;
WChar c;
@@ -122,7 +122,7 @@ void str_validate(char *str, bool allow_newlines)
assert(c != '\r');
/* Replace the undesirable character with a question mark */
str += len;
- *dst++ = '?';
+ if (!ignore) *dst++ = '?';
}
}
diff --git a/src/string_func.h b/src/string_func.h
index a8bf897a8..bf7159751 100644
--- a/src/string_func.h
+++ b/src/string_func.h
@@ -95,7 +95,7 @@ char *CDECL str_fmt(const char *str, ...);
/** Scans the string for valid characters and if it finds invalid ones,
* replaces them with a question mark '?' */
-void str_validate(char *str, bool allow_newlines = false);
+void str_validate(char *str, bool allow_newlines = false, bool ignore = false);
/** Scans the string for colour codes and strips them */
void str_strip_colours(char *str);