From 678010dc8b4ceed98b9578492169fbdbf9cfbb3e Mon Sep 17 00:00:00 2001
From: Amorilia <amorilia@users.sourceforge.net>
Date: Mon, 28 Nov 2005 21:02:19 +0000
Subject: [PATCH] SetTriangles() bugfix and added range checking on vertex &
 triangle counts.

---
 NIF_Blocks.cpp | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/NIF_Blocks.cpp b/NIF_Blocks.cpp
index 9dd0c3bb..60d6d547 100644
--- a/NIF_Blocks.cpp
+++ b/NIF_Blocks.cpp
@@ -776,6 +776,9 @@ void * AShapeData::QueryInterface( int id ) {
 }
 
 void AShapeData::SetVertexCount(int n) {
+	if ( n > 65535 || n < 0 )
+		throw runtime_error("Invalid Vertex Count: must be between 0 and 65535.");
+
 	if ( n == 0 ) {
 		vertices.clear();
 		normals.clear();
@@ -785,7 +788,7 @@ void AShapeData::SetVertexCount(int n) {
 		}
 		return;
 	}
-
+	
 	//n != 0
 	vertices.resize(n);
 
@@ -1128,14 +1131,20 @@ void * NiTriShapeData::QueryInterface( int id ) {
 }
 
 void NiTriShapeData::SetTriangleCount(int n) {
-	triangles.resize(n);
+	if ( n > 65535 || n < 0 )
+		throw runtime_error("Invalid Triangle Count: must be between 0 and 65535.");
+
+	if ( n == 0 )
+		triangles.clear();
+	else
+		triangles.resize(n);
 }
 
 //--Setters--//
 
 void NiTriShapeData::SetTriangles( const vector<Triangle> & in ) {
-	if (in.size() != vertices.size())
-		throw runtime_error("Vector size must equal Vertex Count.  Call SetVertexCount() to resize.");
+	if (in.size() != triangles.size())
+		throw runtime_error("Vector size must equal Triangle Count.  Call SetTriangleCount() to resize.");
 	triangles = in;
 }
 
-- 
GitLab