[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40927] trunk/blender/source/blender: fix for py/rna assigning an invalid index.

Campbell Barton ideasman42 at gmail.com
Tue Oct 11 07:46:00 CEST 2011


Revision: 40927
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40927
Author:   campbellbarton
Date:     2011-10-11 05:45:59 +0000 (Tue, 11 Oct 2011)
Log Message:
-----------
fix for py/rna assigning an invalid index. also give better error message in this case.

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

Modified: trunk/blender/source/blender/makesrna/intern/rna_ID.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ID.c	2011-10-11 05:21:24 UTC (rev 40926)
+++ trunk/blender/source/blender/makesrna/intern/rna_ID.c	2011-10-11 05:45:59 UTC (rev 40927)
@@ -317,9 +317,15 @@
 int rna_IDMaterials_assign_int(PointerRNA *ptr, int key, const PointerRNA *assign_ptr)
 {
 	ID *id=           ptr->id.data;
+	short *totcol= give_totcolp_id(id);
 	Material *mat_id= assign_ptr->id.data;
-	assign_material_id(id, mat_id, key + 1);
-	return 1;
+	if(totcol && (key >= 0 && key < *totcol)) {
+		assign_material_id(id, mat_id, key + 1);
+		return 1;
+	}
+	else {
+		return 0;
+	}
 }
 
 #else

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2011-10-11 05:21:24 UTC (rev 40926)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2011-10-11 05:45:59 UTC (rev 40927)
@@ -1928,10 +1928,10 @@
 }
 
 
+/* notice getting the length of the collection is avoided unless negative
+ * index is used or to detect internal error with a valid index.
+ * This is done for faster lookups. */
 #define PYRNA_PROP_COLLECTION_ABS_INDEX(ret_err)                              \
-	/* notice getting the length of the collection is avoided unless negative \
-	 * index is used or to detect internal error with a valid index.          \
-	 * This is done for faster lookups. */                                    \
 	if(keynum < 0) {                                                          \
 		keynum_abs += RNA_property_collection_length(&self->ptr, self->prop); \
 		if(keynum_abs < 0) {                                                  \
@@ -1984,11 +1984,18 @@
 	PYRNA_PROP_COLLECTION_ABS_INDEX(-1);
 
 	if(RNA_property_collection_assign_int(&self->ptr, self->prop, keynum_abs, ptr) == 0) {
+		const int len= RNA_property_collection_length(&self->ptr, self->prop);
+		if(keynum_abs >= len) {
+			PyErr_Format(PyExc_IndexError,
+			             "bpy_prop_collection[index] = value: "
+			             "index %d out of range, size %d", keynum, len);
+		}
+		else {
 
-		PyErr_Format(PyExc_IndexError,
-		             "bpy_prop_collection[index] = value: "
-		             "failed assignment (unknown reason)", keynum);
-
+			PyErr_Format(PyExc_IndexError,
+			             "bpy_prop_collection[index] = value: "
+			             "failed assignment (unknown reason)", keynum);
+		}
 		return -1;
 	}
 




More information about the Bf-blender-cvs mailing list