(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.
This commit is contained in:
		
							
								
								
									
										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)
 | 
					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 */
 | 
						 * 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 */
 | 
							/* Create the name */
 | 
				
			||||||
		StringID str = AllocateName(_cmd_text, 0);
 | 
							StringID str = AllocateName(_cmd_text, 0);
 | 
				
			||||||
		if (str == 0) return CMD_ERROR;
 | 
							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;
 | 
						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_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)
 | 
					#define FOR_ALL_SIGNS(ss) FOR_ALL_SIGNS_FROM(ss, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user