From 1c806f6bb454dca6f682ecd741bd2fe03b9617bb Mon Sep 17 00:00:00 2001
From: Campbell Barton <ideasman42@gmail.com>
Date: Mon, 23 Nov 2009 17:36:44 +0000
Subject: [PATCH] workaround for an error with BKE_reportf (actually
 BLI_dynstr_vappendf) fixes a crash that happens when formatting a python
 exception into a report. - for now use pythons string formatting function.

happens when running the simple operator template so not sure if its worth re-tagging :S
---
 source/blender/python/intern/bpy_util.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c
index 174d1aa342f..cd53ba9c069 100644
--- a/source/blender/python/intern/bpy_util.c
+++ b/source/blender/python/intern/bpy_util.c
@@ -416,6 +416,7 @@ int BPy_reports_to_error(ReportList *reports)
 int BPy_errors_to_report(ReportList *reports)
 {
 	PyObject *pystring;
+	PyObject *pystring_format= NULL; // workaround, see below
 	char *cstring;
 
 	char *filename;
@@ -439,14 +440,23 @@ int BPy_errors_to_report(ReportList *reports)
 	}
 	
 	BPY_getFileAndNum(&filename, &lineno);
+	if(filename==NULL)
+		filename= "<unknown location>";
 	
 	cstring= _PyUnicode_AsString(pystring);
-	
+
+#if 0 // ARG!. workaround for a bug in blenders use of vsnprintf
 	BKE_reportf(reports, RPT_ERROR, "%s\nlocation:%s:%d\n", cstring, filename, lineno);
+#else
+	pystring_format= PyUnicode_FromFormat("%s\nlocation:%s:%d\n", cstring, filename, lineno);
+	cstring= _PyUnicode_AsString(pystring_format);
+	BKE_report(reports, RPT_ERROR, cstring);
+#endif
 	
 	fprintf(stderr, "%s\nlocation:%s:%d\n", cstring, filename, lineno); // not exactly needed. just for testing
 	
 	Py_DECREF(pystring);
+	Py_DECREF(pystring_format); // workaround
 	return 1;
 }
 
-- 
GitLab