[Bf-blender-cvs] [fe8d8aa27e2] master: Fix Vector.project crash w/ >4 length vectors

Campbell Barton noreply at git.blender.org
Fri Jul 27 09:41:05 CEST 2018


Commit: fe8d8aa27e26f1f8e4d5e1e3fcb6fc6288ebf226
Author: Campbell Barton
Date:   Fri Jul 27 17:40:01 2018 +1000
Branches: master
https://developer.blender.org/rBfe8d8aa27e26f1f8e4d5e1e3fcb6fc6288ebf226

Fix Vector.project crash w/ >4 length vectors

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

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

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

diff --git a/source/blender/python/mathutils/mathutils_Vector.c b/source/blender/python/mathutils/mathutils_Vector.c
index a06a63c8067..6a40f22d9df 100644
--- a/source/blender/python/mathutils/mathutils_Vector.c
+++ b/source/blender/python/mathutils/mathutils_Vector.c
@@ -1127,23 +1127,17 @@ PyDoc_STRVAR(Vector_project_doc,
 static PyObject *Vector_project(VectorObject *self, PyObject *value)
 {
 	const int size = self->size;
-	float tvec[MAX_DIMENSIONS];
-	float vec[MAX_DIMENSIONS];
+	float *tvec;
 	double dot = 0.0f, dot2 = 0.0f;
 	int x;
 
-	if (mathutils_array_parse(tvec, size, size, value, "Vector.project(other), invalid 'other' arg") == -1)
+	if (BaseMath_ReadCallback(self) == -1)
 		return NULL;
 
-	if (self->size > 4) {
-		PyErr_SetString(PyExc_ValueError,
-		                "Vector must be 2D, 3D or 4D");
+	if (mathutils_array_parse_alloc(&tvec, size, value, "Vector.project(other), invalid 'other' arg") == -1) {
 		return NULL;
 	}
 
-	if (BaseMath_ReadCallback(self) == -1)
-		return NULL;
-
 	/* get dot products */
 	for (x = 0; x < size; x++) {
 		dot += (double)(self->vec[x] * tvec[x]);
@@ -1152,9 +1146,9 @@ static PyObject *Vector_project(VectorObject *self, PyObject *value)
 	/* projection */
 	dot /= dot2;
 	for (x = 0; x < size; x++) {
-		vec[x] = (float)dot * tvec[x];
+		tvec[x] *= (float)dot;
 	}
-	return Vector_CreatePyObject(vec, size, Py_TYPE(self));
+	return Vector_CreatePyObject_alloc(tvec, size, Py_TYPE(self));
 }
 
 PyDoc_STRVAR(Vector_lerp_doc,



More information about the Bf-blender-cvs mailing list