[Bf-blender-cvs] [99edd29] master: Fix T38753: Python script paths weren't escaped (Win only)

Campbell Barton noreply at git.blender.org
Sat Feb 22 07:56:36 CET 2014


Commit: 99edd29835fca6128ff05cc1e67885448eadc62d
Author: Campbell Barton
Date:   Sat Feb 22 17:54:50 2014 +1100
https://developer.blender.org/rB99edd29835fca6128ff05cc1e67885448eadc62d

Fix T38753: Python script paths weren't escaped (Win only)

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

M	source/blender/python/intern/bpy_interface.c

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

diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index 23486a8..cf5bf3a 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -496,15 +496,19 @@ static int python_script_exec(bContext *C, const char *fn, struct Text *text,
 			 * incompatible'.
 			 * So now we load the script file data to a buffer */
 			{
-				char *pystring;
+				PyObject *py_dict_local, *fn_py;
+				const char *pystring = "with open(fn, 'r') as f: exec(f.read())";
 
 				fclose(fp);
 
-				pystring = MEM_mallocN(strlen(fn) + 37, "pystring");
-				pystring[0] = '\0';
-				sprintf(pystring, "f=open(r'%s');exec(f.read());f.close()", fn);
-				py_result = PyRun_String(pystring, Py_file_input, py_dict, py_dict);
-				MEM_freeN(pystring);
+				py_dict_local = PyDict_New();
+				fn_py = PyC_UnicodeFromByte(fn);
+				PyDict_SetItemString(py_dict_local, "fn", fn_py);
+				Py_DECREF(fn_py);
+
+				py_result = PyRun_String(pystring, Py_file_input, py_dict, py_dict_local);
+
+				Py_DECREF(py_dict_local);
 			}
 #else
 			py_result = PyRun_File(fp, fn, Py_file_input, py_dict, py_dict);




More information about the Bf-blender-cvs mailing list