From e735370318128e93d57a5d3294bf92551fa33cf8 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 16 Feb 2023 01:17:53 +0100 Subject: [PATCH] Change: [Script] A ScriptText with too many parameters is now a fatal error It should never happen as adding/setting parameters already checks that anyway. --- src/script/api/ai_changelog.hpp | 3 +++ src/script/api/game_changelog.hpp | 3 +++ src/script/api/script_error.hpp | 6 ------ src/script/api/script_text.cpp | 7 ++++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 27ad40e79f..9672777ec6 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -20,6 +20,9 @@ * API additions: * \li AITown::ROAD_LAYOUT_RANDOM * + * API removals: + * \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore. + * * \b 13.0 * * API additions: diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 46a8e4904f..79174cf9af 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -20,6 +20,9 @@ * API additions: * \li GSTown::ROAD_LAYOUT_RANDOM * + * API removals: + * \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore. + * * \b 13.0 * * API additions: diff --git a/src/script/api/script_error.hpp b/src/script/api/script_error.hpp index 87d4196fdd..6d3d476f7b 100644 --- a/src/script/api/script_error.hpp +++ b/src/script/api/script_error.hpp @@ -42,10 +42,6 @@ * @param string The string that is checked. */ #define EnforcePreconditionEncodedText(returnval, string) \ - if ((string) == nullptr) { \ - ScriptObject::SetLastError(ScriptError::ERR_PRECONDITION_TOO_MANY_PARAMETERS); \ - return returnval; \ - } \ if (StrEmpty(string)) { \ ScriptObject::SetLastError(ScriptError::ERR_PRECONDITION_FAILED); \ return returnval; \ @@ -94,8 +90,6 @@ public: ERR_PRECONDITION_FAILED, // [] /** A string supplied was too long */ ERR_PRECONDITION_STRING_TOO_LONG, // [] - /** A string had too many parameters */ - ERR_PRECONDITION_TOO_MANY_PARAMETERS, // [] /** The company you use is invalid */ ERR_PRECONDITION_INVALID_COMPANY, // [] /** An error returned by a NewGRF. No possibility to get the exact error in an script readable format */ diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index 62980326ce..c9040b1d88 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -11,6 +11,7 @@ #include "../../string_func.h" #include "../../strings_func.h" #include "script_text.hpp" +#include "../script_fatalerror.hpp" #include "../../table/control_codes.h" #include "table/strings.h" @@ -181,7 +182,8 @@ const char *ScriptText::GetEncodedText() static char buf[1024]; int param_count = 0; this->_GetEncodedText(buf, lastof(buf), param_count); - return (param_count > SCRIPT_TEXT_MAX_PARAMETERS) ? nullptr : buf; + if (param_count > SCRIPT_TEXT_MAX_PARAMETERS) throw Script_FatalError("A string had too many parameters"); + return buf; } char *ScriptText::_GetEncodedText(char *p, char *lastofp, int ¶m_count) @@ -208,8 +210,7 @@ char *ScriptText::_GetEncodedText(char *p, char *lastofp, int ¶m_count) const char *Text::GetDecodedText() { - const char *encoded_text = this->GetEncodedText(); - if (encoded_text == nullptr) return nullptr; + const std::string &encoded_text = this->GetEncodedText(); static char buf[1024]; ::SetDParamStr(0, encoded_text);