From 322e4ab86fe21c7522ae1501aba175a8f7fa1e5d Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 8 Oct 2010 21:07:54 +0000 Subject: [PATCH] (svn r20908) -Fix [FS#4156]: assertion when the buy menu graphics callback accessed a variable that needs a tile index --- src/newgrf_object.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index f6b2768c96..84d6187b25 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -241,6 +241,7 @@ static uint32 ObjectGetVariable(const ResolverObject *object, byte variable, byt /* Allow these, but find the closest town. */ case 0x45: case 0x46: + if (!IsValidTile(tile)) goto unhandled; t = ClosestTownFromTile(tile, UINT_MAX); break; @@ -257,11 +258,11 @@ static uint32 ObjectGetVariable(const ResolverObject *object, byte variable, byt * 0x63: Animation counter of nearby tile, see above. */ default: - DEBUG(grf, 1, "Unhandled object property 0x%X", variable); - - *available = false; - return UINT_MAX; + goto unhandled; } + + /* If there's an invalid tile, then we don't have enough information at all. */ + if (!IsValidTile(tile)) goto unhandled; } else { t = o->town; } @@ -313,6 +314,7 @@ static uint32 ObjectGetVariable(const ResolverObject *object, byte variable, byt case 0x64: return GetCountAndDistanceOfClosestInstance(parameter, object->grffile->grfid, tile, o); } +unhandled: DEBUG(grf, 1, "Unhandled object property 0x%X", variable); *available = false;