(svn r10423) -Fix [YAPF, r10301]: INVALID_TRACKDIR causing buffer overrun leading to desync in MP game (many thanks Rubidium)
authorKUDr
Wed, 04 Jul 2007 00:12:02 +0000
changeset 7149 1be298a5cc08
parent 7148 4f0d8cecf5b1
child 7150 8c2b0cda3885
(svn r10423) -Fix [YAPF, r10301]: INVALID_TRACKDIR causing buffer overrun leading to desync in MP game (many thanks Rubidium)
src/yapf/yapf_costrail.hpp
--- a/src/yapf/yapf_costrail.hpp	Tue Jul 03 23:23:38 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp	Wed Jul 04 00:12:02 2007 +0000
@@ -90,6 +90,8 @@
 
 	FORCEINLINE int CurveCost(Trackdir td1, Trackdir td2)
 	{
+		assert(IsValidTrackdir(td1));
+		assert(IsValidTrackdir(td2));
 		int cost = 0;
 		if (TrackFollower::Allow90degTurns()
 				&& ((TrackdirToTrackdirBits(td2) & (TrackdirBits)TrackdirCrossesTrackdirs(td1)) != 0)) {
@@ -265,7 +267,7 @@
 		TILE cur(n.m_key.m_tile, n.m_key.m_td);
 
 		// the previous tile will be needed for transition cost calculations
-		TILE prev = has_parent ? TILE() : TILE(n.m_parent->GetLastTile(), n.m_parent->GetLastTrackdir());
+		TILE prev = !has_parent ? TILE() : TILE(n.m_parent->GetLastTile(), n.m_parent->GetLastTrackdir());
 
 		EndSegmentReasonBits end_segment_reason = ESRB_NONE;