Commit: bf1946860b8663c4163f94b70d91385240bbe9d5
Author: Bastien Montagne
Date:   Wed Sep 24 20:26:21 2014 +0200
Branches: blender-v2.72-release
https://developer.blender.org/rBbf1946860b8663c4163f94b70d91385240bbe9d5

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;
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to