[Bf-blender-cvs] [e57ee5934a3] master: Fix T60261: Crash pasting a material without a nodetree

Philipp Oeser noreply at git.blender.org
Wed Jan 16 22:59:27 CET 2019


Commit: e57ee5934a30e87410b7544ba8d18054881b2c00
Author: Philipp Oeser
Date:   Thu Jan 17 08:59:02 2019 +1100
Branches: master
https://developer.blender.org/rBe57ee5934a30e87410b7544ba8d18054881b2c00

Fix T60261: Crash pasting a material without a nodetree

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

M	source/blender/blenkernel/intern/material.c
M	source/blender/editors/render/render_shading.c

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

diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 913bc9c47e6..fc03116de20 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -1399,7 +1399,10 @@ void copy_matcopybuf(Main *bmain, Material *ma)
 
 	memcpy(&matcopybuf, ma, sizeof(Material));
 
-	matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, bmain, false);
+	if (ma->nodetree != NULL) {
+		matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, bmain, false);
+	}
+
 	matcopybuf.preview = NULL;
 	BLI_listbase_clear(&matcopybuf.gpumaterial);
 	/* TODO Duplicate Engine Settings and set runtime to NULL */
@@ -1425,7 +1428,9 @@ void paste_matcopybuf(Main *bmain, Material *ma)
 	memcpy(ma, &matcopybuf, sizeof(Material));
 	(ma->id) = id;
 
-	ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, bmain, false);
+	if (matcopybuf.nodetree != NULL) {
+		ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, bmain, false);
+	}
 }
 
 void BKE_material_eval(struct Depsgraph *depsgraph, Material *material)
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 587d2d91029..bc92a45391c 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -1782,6 +1782,7 @@ static int paste_material_exec(bContext *C, wmOperator *UNUSED(op))
 
 	paste_matcopybuf(CTX_data_main(C), ma);
 
+	DEG_id_tag_update(&ma->id, ID_RECALC_COPY_ON_WRITE);
 	WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);
 
 	return OPERATOR_FINISHED;



More information about the Bf-blender-cvs mailing list