[Bf-blender-cvs] [41a3ce8] mathutils_bvhtree: Check range of triangles passed into new bvhtrees

Campbell Barton noreply at git.blender.org
Wed Jul 15 19:07:38 CEST 2015


Commit: 41a3ce878caaefba7737ba0e203116954cfdbb90
Author: Campbell Barton
Date:   Thu Jul 16 03:00:44 2015 +1000
Branches: mathutils_bvhtree
https://developer.blender.org/rB41a3ce878caaefba7737ba0e203116954cfdbb90

Check range of triangles passed into new bvhtrees

Avoid crashesing on invalid data

===================================================================

M	source/blender/python/mathutils/mathutils_bvhtree.c

===================================================================

diff --git a/source/blender/python/mathutils/mathutils_bvhtree.c b/source/blender/python/mathutils/mathutils_bvhtree.c
index c1086dc..470f0fd 100644
--- a/source/blender/python/mathutils/mathutils_bvhtree.c
+++ b/source/blender/python/mathutils/mathutils_bvhtree.c
@@ -811,6 +811,7 @@ static int PyBVHTreeCustom__tp_init(PyBVHTree_Custom *self, PyObject *args, PyOb
 		for (i = 0; i < numtris; i++) {
 			PyObject *py_triverts = PySequence_Fast_GET_ITEM(py_tris_fast, i);
 			PyObject *py_triverts_fast = PySequence_Fast(py_triverts, error_prefix);
+			int j;
 
 			if (py_triverts_fast == NULL) {
 				valid = false;
@@ -825,9 +826,21 @@ static int PyBVHTreeCustom__tp_init(PyBVHTree_Custom *self, PyObject *args, PyOb
 				break;
 			}
 			
-			tp->tri[0] = _PyLong_AsInt(PySequence_Fast_GET_ITEM(py_triverts_fast, 0));
-			tp->tri[1] = _PyLong_AsInt(PySequence_Fast_GET_ITEM(py_triverts_fast, 1));
-			tp->tri[2] = _PyLong_AsInt(PySequence_Fast_GET_ITEM(py_triverts_fast, 2));
+			for (j = 0; j++; j < 3) {
+				const int index = _PyLong_AsInt(PySequence_Fast_GET_ITEM(py_triverts_fast, j));
+				if (UNLIKELY(index == -1 && PyErr_Occurred())) {
+					valid = false;
+					break;
+				}
+				else if (UNLIKELY(index < 0 || index >= numverts)) {
+					PyErr_Format(PyExc_ValueError,
+					             "Index %d out of range [0-%d]", index, numverts);
+					valid = false;
+					break;
+				}
+
+				tp->tri[j] = index;
+			}
 			Py_DECREF(py_triverts_fast);
 		}
 	}




More information about the Bf-blender-cvs mailing list