[Bf-blender-cvs] [0fa5c0d] blender-v2.75-release: Cycles: Solve possible buffer overrun when using too much closures

Sergey Sharybin noreply at git.blender.org
Thu Jun 18 17:38:09 CEST 2015


Commit: 0fa5c0df74914023eaf2944b8a2fcb46b52e38f7
Author: Sergey Sharybin
Date:   Sat Jun 13 18:43:14 2015 +0200
Branches: blender-v2.75-release
https://developer.blender.org/rB0fa5c0df74914023eaf2944b8a2fcb46b52e38f7

Cycles: Solve possible buffer overrun when using too much closures

Glass BSDF was doing some magic with copying weigths from initial closure
onto refraction one and the code was not checking properly for the number
of closures.

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

M	intern/cycles/kernel/svm/svm_closure.h

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

diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 7cdcbc2..20a6cb8 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -285,15 +285,17 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 #endif
 
 			/* refraction */
-			sc = ccl_fetch_array(sd, closure, ccl_fetch(sd, num_closure));
-			sc->weight = weight;
-			sc->sample_weight = sample_weight;
+			if(ccl_fetch(sd, num_closure) < MAX_CLOSURE) {
+				sc = ccl_fetch_array(sd, closure, ccl_fetch(sd, num_closure));
+				sc->weight = weight;
+				sc->sample_weight = sample_weight;
 
-			sc = svm_node_closure_get_bsdf(sd, mix_weight*(1.0f - fresnel));
+				sc = svm_node_closure_get_bsdf(sd, mix_weight*(1.0f - fresnel));
 
-			if(sc) {
-				sc->N = N;
-				svm_node_glass_setup(sd, sc, type, eta, roughness, true);
+				if(sc) {
+					sc->N = N;
+					svm_node_glass_setup(sd, sc, type, eta, roughness, true);
+				}
 			}
 
 			break;




More information about the Bf-blender-cvs mailing list