fix for crash when running a python script in a non utf8 blend path, inspecting the...
authorCampbell Barton <ideasman42@gmail.com>
Fri, 26 Aug 2011 17:55:03 +0000 (17:55 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 26 Aug 2011 17:55:03 +0000 (17:55 +0000)
source/blender/editors/armature/editarmature.c
source/blender/python/intern/bpy_traceback.c

index 451154ce842477a758ed921189ca90fe9e3ee155..08f313bfadd3753c323345060ab192b56329f3c3 100644 (file)
@@ -518,7 +518,7 @@ void ED_armature_apply_transform(Object *ob, float mat[4][4])
                mul_m4_v3(mat, ebone->tail);
 
                /* apply the transfiormed roll back */
-               mat3_to_vec_roll(tmat, delta, &ebone->roll);
+               mat3_to_vec_roll(tmat, NULL, &ebone->roll);
 
                ebone->rad_head *= scale;
                ebone->rad_tail *= scale;
index 17f082b79dc28631a35e5b6ddb78fba08b74a289..747a876d6dfde018a368667aa947b3434e868502 100644 (file)
@@ -30,9 +30,9 @@
 
 #include "bpy_traceback.h"
 
-static const char *traceback_filepath(PyTracebackObject *tb)
+static const char *traceback_filepath(PyTracebackObject *tb, PyObject **coerce)
 {
-       return _PyUnicode_AsString(tb->tb_frame->f_code->co_filename);
+       return PyBytes_AS_STRING((*coerce= PyUnicode_EncodeFSDefault(tb->tb_frame->f_code->co_filename)));
 }
 
 /* copied from pythonrun.c, 3.2.0 */
@@ -146,7 +146,12 @@ void python_script_error_jump(const char *filepath, int *lineno, int *offset)
                PyErr_Print();
 
                for(tb= (PyTracebackObject *)PySys_GetObject("last_traceback"); tb && (PyObject *)tb != Py_None; tb= tb->tb_next) {
-                       if(strcmp(traceback_filepath(tb), filepath) != 0) {
+                       PyObject *coerce;
+                       const char *tb_filepath= traceback_filepath(tb, &coerce);
+                       const int match= strcmp(tb_filepath, filepath) != 0;
+                       Py_DECREF(coerce);
+
+                       if(match) {
                                *lineno= tb->tb_lineno;
                                break;
                        }