[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53728] trunk/blender/source/blender/ python/intern/bpy_props.c: fix for bpy.props string get-length callback, PyUnicode_GetLength() isn't a measure of the buffer size.
Campbell Barton
ideasman42 at gmail.com
Fri Jan 11 05:10:01 CET 2013
Revision: 53728
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53728
Author: campbellbarton
Date: 2013-01-11 04:09:54 +0000 (Fri, 11 Jan 2013)
Log Message:
-----------
fix for bpy.props string get-length callback, PyUnicode_GetLength() isn't a measure of the buffer size.
Modified Paths:
--------------
trunk/blender/source/blender/python/intern/bpy_props.c
Modified: trunk/blender/source/blender/python/intern/bpy_props.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_props.c 2013-01-11 03:26:49 UTC (rev 53727)
+++ trunk/blender/source/blender/python/intern/bpy_props.c 2013-01-11 04:09:54 UTC (rev 53728)
@@ -974,20 +974,18 @@
printf_func_error(py_func);
value[0] = '\0';
}
+ else if (!PyUnicode_Check(ret)) {
+ PyErr_Format(PyExc_TypeError,
+ "return value must be a string, not %.200s",
+ Py_TYPE(ret)->tp_name);
+ printf_func_error(py_func);
+ value[0] = '\0';
+ Py_DECREF(ret);
+ }
else {
Py_ssize_t length;
const char *buffer = _PyUnicode_AsStringAndSize(ret, &length);
-
- if (!buffer) {
- if (PyErr_Occurred()) { /* should always be true */
- printf_func_error(py_func);
- }
- value[0] = '\0';
- }
- else {
- memcpy(value, buffer, length + 1);
- }
-
+ memcpy(value, buffer, length + 1);
Py_DECREF(ret);
}
@@ -1034,9 +1032,20 @@
if (ret == NULL) {
printf_func_error(py_func);
+ length = 0;
}
+ else if (!PyUnicode_Check(ret)) {
+ PyErr_Format(PyExc_TypeError,
+ "return value must be a string, not %.200s",
+ Py_TYPE(ret)->tp_name);
+ printf_func_error(py_func);
+ length = 0;
+ Py_DECREF(ret);
+ }
else {
- length = PyUnicode_GetLength(ret);
+ Py_ssize_t length_ssize_t = 0;
+ _PyUnicode_AsStringAndSize(ret, &length_ssize_t);
+ length = length_ssize_t;
Py_DECREF(ret);
}
More information about the Bf-blender-cvs
mailing list