summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2013-11-24 19:46:16 +0000
committerrubidium <rubidium@openttd.org>2013-11-24 19:46:16 +0000
commit168fa4129d9d3b1296be8684f0f2f9c146014456 (patch)
tree1fd20ec9934dc05bba1ff8ef6bd683231a95189d /src
parent4de2871fc0e71fd07824bbe63c12d83af9e0ca12 (diff)
downloadopenttd-168fa4129d9d3b1296be8684f0f2f9c146014456.tar.xz
(svn r26092) -Fix [FS#5818]: prevent scripts from crashing OpenTTD when they send text with command codes to user editable texts such as sign and station names
Diffstat (limited to 'src')
-rw-r--r--src/command.cpp2
-rw-r--r--src/script/api/script_object.cpp6
2 files changed, 6 insertions, 2 deletions
diff --git a/src/command.cpp b/src/command.cpp
index 5710f0bb6..2585eda00 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -219,7 +219,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_STATION
DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAILD
DEF_CMD(CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_WAYPOINT
- DEF_CMD(CmdRenameWaypoint, CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_WAYPOINT
+ DEF_CMD(CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_WAYPOINT
DEF_CMD(CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_WAYPOINT
DEF_CMD(CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_STOP
diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp
index 6d4140b2a..d9aefca3c 100644
--- a/src/script/api/script_object.cpp
+++ b/src/script/api/script_object.cpp
@@ -287,7 +287,11 @@ ScriptObject::ActiveInstance::~ActiveInstance()
return false;
}
- assert(StrEmpty(text) || (GetCommandFlags(cmd) & CMD_STR_CTRL) != 0 || StrValid(text, text + strlen(text)));
+ if (!StrEmpty(text) && (GetCommandFlags(cmd) & CMD_STR_CTRL) == 0) {
+ /* The string must be valid, i.e. not contain special codes. Since some
+ * can be made with GSText, make sure the control codes are removed. */
+ str_validate(text, text + strlen(text)), SVS_NONE);
+ }
/* Set the default callback to return a true/false result of the DoCommand */
if (callback == NULL) callback = &ScriptInstance::DoCommandReturn;