[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