diff --git a/pathfind.c b/pathfind.c index 5290b86f19..18bff63bcb 100644 --- a/pathfind.c +++ b/pathfind.c @@ -664,11 +664,14 @@ static void NTPEnum(NewTrackPathFinder *tpf, TileIndex tile, uint direction) FindLengthOfTunnelResult flotr; int estimation; + + // Need to have a special case for the start. // We shouldn't call the callback for the current tile. si.cur_length = 1; // Need to start at 1 cause 0 is a reserved value. si.depth = 0; si.state = 0; + si.first_track = 0xFF; goto start_at; for(;;) { @@ -690,7 +693,9 @@ callback_and_continue: if (tpf->enum_proc(tile, tpf->userdata, si.first_track, si.cur_length)) return; + assert(si.track <= 13); direction = _tpf_new_direction[si.track]; + assert(direction <= 3); start_at: // If the tile is the entry tile of a tunnel, and we're not going out of the tunnel, @@ -715,6 +720,7 @@ start_at: // a rail net and find the first intersection tile_org = tile; for(;;) { + assert(direction <= 3); tile += TileOffsByDir(direction); // too long search length? bail out. @@ -812,7 +818,7 @@ start_at: // continue with the next track direction = _tpf_new_direction[track]; - assert(direction != 0xFF); + assert(direction <= 3); // safety check if we're running around chasing our tail... (infinite loop) if (tile == tile_org) { @@ -850,7 +856,9 @@ start_at: si.depth++; si.tile = tile; do { + assert(direction <= 3); si.track = _new_track[FIND_FIRST_BIT(bits)][direction]; + assert(si.track <= 13); si.priority = si.cur_length + estimation; // out of stack items, bail out?