[Bf-blender-cvs] [e18a748] master: Fix T41933: Node Editor: Crash occurs with Select by Suffix

Bastien Montagne noreply at git.blender.org
Wed Sep 24 20:28:11 CEST 2014


Commit: e18a74849c2dda52b25e0ca35127f511999a471c
Author: Bastien Montagne
Date:   Wed Sep 24 20:26:21 2014 +0200
Branches: master
https://developer.blender.org/rBe18a74849c2dda52b25e0ca35127f511999a471c

Fix T41933: Node Editor: Crash occurs with Select by Suffix

Wrong usage of `BLI_str_partition_ex_utf8`...

This is to be backported to 2.72 branch.

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

M	source/blender/editors/space_node/node_select.c

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

diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c
index 5a78ea6..de580f6 100644
--- a/source/blender/editors/space_node/node_select.c
+++ b/source/blender/editors/space_node/node_select.c
@@ -248,22 +248,34 @@ static bool node_select_grouped_name(SpaceNode *snode, bNode *node_act, const bo
 	bNode *node;
 	bool changed = false;
 	const unsigned int delims[] = {'.', '-', '_', '\0'};
-	size_t index_act, index_curr;
+	size_t pref_len_act, pref_len_curr;
 	char *sep, *suf_act, *suf_curr;
 
-	index_act = BLI_str_partition_ex_utf8(node_act->name, delims, &sep, &suf_act, from_right);
+	pref_len_act = BLI_str_partition_ex_utf8(node_act->name, delims, &sep, &suf_act, from_right);
 
-	if (index_act > 0) {
-		for (node = snode->edittree->nodes.first; node; node = node->next) {
-			if ((node->flag & SELECT) == 0) {
-				index_curr = BLI_str_partition_ex_utf8(node->name, delims, &sep, &suf_curr, from_right);
-				if ((from_right && STREQ(suf_act, suf_curr)) ||
-				    (!from_right && (index_act == index_curr) && STREQLEN(node_act->name, node->name, index_act)))
-				{
-					nodeSetSelected(node, true);
-					changed = true;
-				}
-			}
+	/* Note: in case we are searching for suffix, and found none, use whole name as suffix. */
+	if (from_right && !(sep && suf_act)) {
+		pref_len_act = 0;
+		suf_act = node_act->name;
+	}
+
+	for (node = snode->edittree->nodes.first; node; node = node->next) {
+		if (node->flag & SELECT) {
+			continue;
+		}
+		pref_len_curr = BLI_str_partition_ex_utf8(node->name, delims, &sep, &suf_curr, from_right);
+
+		/* Same as with active node name! */
+		if (from_right && !(sep && suf_curr)) {
+			pref_len_curr = 0;
+			suf_curr = node->name;
+		}
+
+		if ((from_right && STREQ(suf_act, suf_curr)) ||
+		    (!from_right && (pref_len_act == pref_len_curr) && STREQLEN(node_act->name, node->name, pref_len_act)))
+		{
+			nodeSetSelected(node, true);
+			changed = true;
 		}
 	}




More information about the Bf-blender-cvs mailing list