diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2014-09-24 22:26:21 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-10-03 17:09:24 +0400 |
commit | bf1946860b8663c4163f94b70d91385240bbe9d5 (patch) | |
tree | c109f2c677909d7ad527b7ae33e5bde5de481964 /source/blender | |
parent | b2c28a3e8293e4fb1314cb3143ac5ab2f182ced0 (diff) |
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.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/space_node/node_select.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 5a78ea6ebd8..de580f612a0 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; } } |