diff -r 48fb9f0322cb -r 2c9fda706e52 pathfind.c --- a/pathfind.c Tue Jul 19 22:29:35 2005 +0000 +++ b/pathfind.c Wed Jul 20 09:17:20 2005 +0000 @@ -664,11 +664,14 @@ 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 @@ 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 @@ // 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 @@ // 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 @@ 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?