[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29426] trunk/blender/source/blender: bugfix [#22486] add_actuator crashes when name is bigger than 32 chars

Campbell Barton ideasman42 at gmail.com
Sat Jun 12 17:49:02 CEST 2010


Revision: 29426
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29426
Author:   campbellbarton
Date:     2010-06-12 17:49:01 +0200 (Sat, 12 Jun 2010)

Log Message:
-----------
bugfix [#22486] add_actuator crashes when name is bigger than 32 chars
have pyrna raise an error on strings that are too long.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_access.c	2010-06-12 15:05:19 UTC (rev 29425)
+++ trunk/blender/source/blender/makesrna/intern/rna_access.c	2010-06-12 15:49:01 UTC (rev 29426)
@@ -960,7 +960,8 @@
 	}
 }
 
-/* this is the max length including \0 terminator */
+/* this is the max length including \0 terminator.
+ * -1 used when their is no maximum */
 int RNA_property_string_maxlength(PropertyRNA *prop)
 {
 	StringPropertyRNA *sprop= (StringPropertyRNA*)rna_ensure_property(prop);

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-06-12 15:05:19 UTC (rev 29425)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-06-12 15:49:01 UTC (rev 29426)
@@ -924,12 +924,18 @@
 		}
 		case PROP_STRING:
 		{
-			char *param = _PyUnicode_AsString(value);
-			
+			Py_ssize_t param_len;
+			int param_maxlen= RNA_property_string_maxlength(prop) - 1;
+			char *param = _PyUnicode_AsStringAndSize(value, &param_len);
+
 			if (param==NULL) {
 				PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a string type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
 				return -1;
-			} else {
+			} else if (param_maxlen != -1 && param_len > param_maxlen) { /* -1 because it includes the \0 */
+				PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s string is length %d, expected maximum of %d", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), (int)param_len, param_maxlen);
+				return -1;
+			}
+			else {
 				if(data)	*((char**)data)= param;
 				else		RNA_property_string_set(ptr, prop, param);
 			}





More information about the Bf-blender-cvs mailing list