[Bf-blender-cvs] [3014601] surface-deform-modifier: Fix out of bounds memory access in interp_weights_face_v3

Luca Rood noreply at git.blender.org
Tue Jan 3 22:54:27 CET 2017


Commit: 3014601f3be875496b7297954c48462a8a1a9ece
Author: Luca Rood
Date:   Thu Dec 22 02:11:59 2016 -0200
Branches: surface-deform-modifier
https://developer.blender.org/rB3014601f3be875496b7297954c48462a8a1a9ece

Fix out of bounds memory access in interp_weights_face_v3

interp_weights_face_v3 required a length four array for weights even when
calculating weights for a tri, otherwise, it would access unkown memory.
This fix allows a weight array of size three to be passed when only
calculating tri weights.

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

M	source/blender/blenlib/intern/math_geom.c

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

diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index 5ff8c90..7f9b33a 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -2978,7 +2978,7 @@ void interp_weights_face_v3(float w[4], const float v1[3], const float v2[3], co
 {
 	float w2[3];
 
-	w[0] = w[1] = w[2] = w[3] = 0.0f;
+	w[0] = w[1] = w[2] = 0.0f;
 
 	/* first check for exact match */
 	if (equals_v3v3(co, v1))
@@ -3005,6 +3005,7 @@ void interp_weights_face_v3(float w[4], const float v1[3], const float v2[3], co
 
 		/* OpenGL seems to split this way, so we do too */
 		if (v4) {
+			w[3] = 0.0f;
 			degenerate = barycentric_weights(v1, v2, v4, co, n, w);
 			SWAP(float, w[2], w[3]);




More information about the Bf-blender-cvs mailing list