Fix T76559: Crash after deleting material leaves invalid pointer in node editor.

No idea why node editor remap callback was only handling scene IDs (and
not any other ntree owner)...

Note that this should be a safe fix, but it unvails a nice can of worm,
at some point we should ba able to handle all of that through libquery
only, get rid of editor's remap callbacks, and probably sanitize usages
of ID pointers by some of them, like that nodetree editor.

Current situation remains a fairly fragile mess...
This commit is contained in:
Bastien Montagne 2020-05-11 17:24:56 +02:00
parent 249ccab111
commit 4e1a6b48e7
Notes: blender-bot 2023-02-13 22:35:22 +01:00
Referenced by issue #76559, Crash after deleting material leaves invalid pointer in node editor
1 changed files with 10 additions and 12 deletions

View File

@ -855,19 +855,17 @@ static void node_id_remap(ScrArea *UNUSED(area), SpaceLink *slink, ID *old_id, I
{
SpaceNode *snode = (SpaceNode *)slink;
if (GS(old_id->name) == ID_SCE) {
if (snode->id == old_id) {
/* nasty DNA logic for SpaceNode:
* ideally should be handled by editor code, but would be bad level call
*/
BLI_freelistN(&snode->treepath);
if (snode->id == old_id) {
/* nasty DNA logic for SpaceNode:
* ideally should be handled by editor code, but would be bad level call
*/
BLI_freelistN(&snode->treepath);
/* XXX Untested in case new_id != NULL... */
snode->id = new_id;
snode->from = NULL;
snode->nodetree = NULL;
snode->edittree = NULL;
}
/* XXX Untested in case new_id != NULL... */
snode->id = new_id;
snode->from = NULL;
snode->nodetree = NULL;
snode->edittree = NULL;
}
else if (GS(old_id->name) == ID_OB) {
if (snode->from == old_id) {