mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
90ca24f7b6
commit
21d9e2c934
6
signs.c
6
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;
|
||||
|
|
5
signs.h
5
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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue