From 6dbc01529143b054004aec91f706ecdc2299421d Mon Sep 17 00:00:00 2001 From: Darkvater Date: Tue, 17 May 2005 19:36:36 +0000 Subject: (svn r2342) - Fix (Regression): _cmd_text is always valid, so test the first character for '\0'. Also for some reason I forgot to validate the p1 param so that might lead to crashes with invalid signes. Fixed as well. --- signs.c | 6 ++++-- signs.h | 5 +++++ 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) -- cgit v1.2.3-54-g00ecf