Browse Source

Ninja patch gfaydark crash cause its hitting bsp tree max size node 4294967295?

Image 3 years ago
parent
commit
cb6ed3a647

+ 6 - 0
EQ2/source/WorldServer/Zone/region_map_v1.cpp

@@ -9,6 +9,7 @@
 extern LuaInterface* lua_interface;
 
 RegionMapV1::RegionMapV1() {
+	BSPTreeSize = 0;
 	mVersion = 1;
 }
 
@@ -145,6 +146,8 @@ bool RegionMapV1::Load(FILE* fp, std::string inZoneNameLwr, int32 version) {
 			return false;
 		}
 
+		BSPTreeSize = bsp_tree_size;
+
 		LogWrite(REGION__DEBUG, 0, "RegionMap", "region x,y,z,dist = %f, %f, %f, %f, region bsp tree size: %u", x, y, z, dist, bsp_tree_size);
 
 		ZBSP_Node* BSP_Root = new ZBSP_Node[bsp_tree_size];
@@ -493,6 +496,9 @@ WaterRegionType RegionMapV1::BSPReturnRegionType(int32 node_number, const glm::v
 }
 
 WaterRegionType RegionMapV1::BSPReturnRegionTypeNode(const Region_Node* region_node, const ZBSP_Node* BSP_Root, int32 node_number, const glm::vec3& location, float distToNode) const {
+	if(node_number > BSPTreeSize || node_number == 4294967295)
+		return RegionTypeNormal;
+		
 	const ZBSP_Node* current_node = &BSP_Root[node_number - 1];
 	float distance;
 

+ 1 - 0
EQ2/source/WorldServer/Zone/region_map_v1.h

@@ -71,6 +71,7 @@ private:
 	friend class RegionMap;
 
 	int32 mVersion;
+	int32 BSPTreeSize;
 	std::string mZoneNameLower;
 };