Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-07-11 18:58:42 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-07-11 18:59:46 +0300
commitea32a0380148b3261679eded2149ebac7e3a15ef (patch)
tree5c1c7c34b9db3f37e58d651688302df78e8f79ee /intern/cycles/kernel/bvh/bvh_volume_all.h
parent8bc6f8bf20ab13abd232ba12f77eb904dfe95d79 (diff)
Fix T48824: Crash when having too many ray-to-volume intersections
Code might have writing past the array boundaries.
Diffstat (limited to 'intern/cycles/kernel/bvh/bvh_volume_all.h')
-rw-r--r--intern/cycles/kernel/bvh/bvh_volume_all.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/intern/cycles/kernel/bvh/bvh_volume_all.h b/intern/cycles/kernel/bvh/bvh_volume_all.h
index 7eddc2891d0..b5405e8e57b 100644
--- a/intern/cycles/kernel/bvh/bvh_volume_all.h
+++ b/intern/cycles/kernel/bvh/bvh_volume_all.h
@@ -201,13 +201,11 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
object,
prim_addr);
if(hit) {
- /* Move on to next entry in intersections array. */
- isect_array++;
+ /* Update number of hits now, so we do proper check on max bounces. */
num_hits++;
#if BVH_FEATURE(BVH_INSTANCING)
num_hits_in_instance++;
#endif
- isect_array->t = isect_t;
if(num_hits == max_hits) {
#if BVH_FEATURE(BVH_INSTANCING)
# if BVH_FEATURE(BVH_MOTION)
@@ -222,6 +220,9 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
#endif /* BVH_FEATURE(BVH_INSTANCING) */
return num_hits;
}
+ /* Move on to next entry in intersections array */
+ isect_array++;
+ isect_array->t = isect_t;
}
}
break;
@@ -246,13 +247,11 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
object,
prim_addr);
if(hit) {
- /* Move on to next entry in intersections array. */
- isect_array++;
+ /* Update number of hits now, so we do proper check on max bounces. */
num_hits++;
# if BVH_FEATURE(BVH_INSTANCING)
num_hits_in_instance++;
# endif
- isect_array->t = isect_t;
if(num_hits == max_hits) {
# if BVH_FEATURE(BVH_INSTANCING)
# if BVH_FEATURE(BVH_MOTION)
@@ -267,6 +266,9 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
# endif /* BVH_FEATURE(BVH_INSTANCING) */
return num_hits;
}
+ /* Move on to next entry in intersections array */
+ isect_array++;
+ isect_array->t = isect_t;
}
}
break;