diff options
-rw-r--r-- | signs.c | 6 | ||||
-rw-r--r-- | signs.h | 5 |
2 files changed, 9 insertions, 2 deletions
@@ -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; @@ -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) |