summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--signs.c6
-rw-r--r--signs.h5
2 files changed, 9 insertions, 2 deletions
diff --git a/signs.c b/signs.c
index 50865d230..9974dd91c 100644
--- a/signs.c
+++ b/signs.c
@@ -136,9 +136,11 @@ int32 CmdPlaceSign(int x, int y, uint32 flags, uint32 p1, uint32 p2)
*/
int32 CmdRenameSign(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
- /* If _cmd_text != 0 means the new text for the sign is non-empty.
+ if (!IsSignIndex(p1)) return CMD_ERROR;
+
+ /* If _cmd_text 0 means the new text for the sign is non-empty.
* So rename the sign. If it is empty, it has no name, so delete it */
- if (_cmd_text != NULL) {
+ if (_cmd_text[0] != '\0') {
/* Create the name */
StringID str = AllocateName(_cmd_text, 0);
if (str == 0) return CMD_ERROR;
diff --git a/signs.h b/signs.h
index 2cc417ca0..4451f8f89 100644
--- a/signs.h
+++ b/signs.h
@@ -41,6 +41,11 @@ static inline uint16 GetSignPoolSize(void)
return _sign_pool.total_items;
}
+static inline bool IsSignIndex(uint index)
+{
+ return index < GetSignPoolSize();
+}
+
#define FOR_ALL_SIGNS_FROM(ss, start) for (ss = GetSign(start); ss != NULL; ss = (ss->index + 1 < GetSignPoolSize()) ? GetSign(ss->index + 1) : NULL)
#define FOR_ALL_SIGNS(ss) FOR_ALL_SIGNS_FROM(ss, 0)