== PyNodes ==
authorWillian Padovani Germano <wpgermano@gmail.com>
Fri, 23 May 2008 16:31:02 +0000 (16:31 +0000)
committerWillian Padovani Germano <wpgermano@gmail.com>
Fri, 23 May 2008 16:31:02 +0000 (16:31 +0000)
Fixing bug #11737 reported by Daniel Salazar (Zanqdo, thanks!): assigning as pynode a text that failed to parse as a pynode script, then deleting that text would crash Blender.

http://projects.blender.org/tracker/?func=detail&atid=125&aid=11737&group_id=9

source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c

index 78f780c43b11c624d0bcb4f79a3b8992982f7e49..49473b213cec9183fc0a90e839e7bfd62b149f01 100644 (file)
@@ -239,6 +239,27 @@ static void node_dynamic_reset(bNode *node, int unlink_text)
        tinfo = node->typeinfo;
        tinfo_default = node_dynamic_find_typeinfo(&node_all_shaders, NULL);
 
+       if ((tinfo == tinfo_default) && unlink_text) {
+               ID *textID = node->id;
+       /* already at default (empty) state, which happens if this node's
+        * script failed to parse at the first stage: definition. We're here
+        * because its text was removed from Blender. */
+               for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+                       if (ma->nodetree) {
+                               bNode *nd;
+                               for (nd= ma->nodetree->nodes.first; nd; nd = nd->next) {
+                                       if (nd->id == textID) {
+                                               nd->id = NULL;
+                                               nd->custom1 = 0;
+                                               nd->custom1 = BSET(nd->custom1, NODE_DYNAMIC_NEW);
+                                               BLI_strncpy(nd->name, "Dynamic", 8);
+                                               return;
+                                       }
+                               }
+                       }
+               }
+       }
+
        node_dynamic_rem_all_links(tinfo);
        node_dynamic_free_typeinfo_sockets(tinfo);