[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