# HG changeset patch # User Darkvater # Date 1116358596 0 # Node ID ebd6a1395d03d8de019307f3d9fa97262cb7730b # Parent 6513570a4690008979a11fbded7e042a45daf35b (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. diff -r 6513570a4690 -r ebd6a1395d03 signs.c --- a/signs.c Tue May 17 19:08:27 2005 +0000 +++ b/signs.c Tue May 17 19:36:36 2005 +0000 @@ -136,9 +136,11 @@ */ 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 -r 6513570a4690 -r ebd6a1395d03 signs.h --- a/signs.h Tue May 17 19:08:27 2005 +0000 +++ b/signs.h Tue May 17 19:36:36 2005 +0000 @@ -41,6 +41,11 @@ 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)