[Bf-blender-cvs] [301bcf771de] master: Fix T62210: endless loop in kd tree lookup

Jacques Lucke noreply at git.blender.org
Tue Mar 5 16:24:13 CET 2019


Commit: 301bcf771dec827138412ca6e7a25e2269eb5e9e
Author: Jacques Lucke
Date:   Tue Mar 5 16:20:43 2019 +0100
Branches: master
https://developer.blender.org/rB301bcf771dec827138412ca6e7a25e2269eb5e9e

Fix T62210: endless loop in kd tree lookup

The problem was that `balance` expected that all node children
are set to `KD_NODE_UNSET` by default.
However, this might not be the case when `balance` is called
more than once.

The balance function might change the order of nodes even
when no new point has been inserted.

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

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

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

diff --git a/source/blender/blenlib/intern/BLI_kdtree.c b/source/blender/blenlib/intern/BLI_kdtree.c
index 4f12bd0a93f..20e30ce669c 100644
--- a/source/blender/blenlib/intern/BLI_kdtree.c
+++ b/source/blender/blenlib/intern/BLI_kdtree.c
@@ -112,10 +112,15 @@ static uint kdtree_balance(KDTreeNode *nodes, uint totnode, uint axis, const uin
 	float co;
 	uint left, right, median, i, j;
 
-	if (totnode <= 0)
+	if (totnode <= 0) {
 		return KD_NODE_UNSET;
-	else if (totnode == 1)
+	}
+	else if (totnode == 1) {
+		node = nodes + ofs;
+		node->left = KD_NODE_UNSET;
+		node->right = KD_NODE_UNSET;
 		return 0 + ofs;
+	}
 
 	/* quicksort style sorting around median */
 	left = 0;



More information about the Bf-blender-cvs mailing list