[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33300] trunk/blender/source/blender/ blenkernel/intern/fcurve.c: drivers could reference invalid index values outside the bounds of the array .
Campbell Barton
ideasman42 at gmail.com
Wed Nov 24 22:33:07 CET 2010
Revision: 33300
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33300
Author: campbellbarton
Date: 2010-11-24 22:33:07 +0100 (Wed, 24 Nov 2010)
Log Message:
-----------
drivers could reference invalid index values outside the bounds of the array.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/fcurve.c
Modified: trunk/blender/source/blender/blenkernel/intern/fcurve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/fcurve.c 2010-11-24 21:24:40 UTC (rev 33299)
+++ trunk/blender/source/blender/blenkernel/intern/fcurve.c 2010-11-24 21:33:07 UTC (rev 33300)
@@ -934,31 +934,44 @@
/* get property to read from, and get value as appropriate */
if (RNA_path_resolve_full(&id_ptr, dtar->rna_path, &ptr, &prop, &index)) {
- switch (RNA_property_type(prop)) {
+ if(RNA_property_array_check(&ptr, prop)) {
+ /* array */
+ if (index < RNA_property_array_length(&ptr, prop)) {
+ switch (RNA_property_type(prop)) {
+ case PROP_BOOLEAN:
+ value= (float)RNA_property_boolean_get_index(&ptr, prop, index);
+ break;
+ case PROP_INT:
+ value= (float)RNA_property_int_get_index(&ptr, prop, index);
+ break;
+ case PROP_FLOAT:
+ value= RNA_property_float_get_index(&ptr, prop, index);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ else {
+ /* not an array */
+ switch (RNA_property_type(prop)) {
case PROP_BOOLEAN:
- if (RNA_property_array_length(&ptr, prop))
- value= (float)RNA_property_boolean_get_index(&ptr, prop, index);
- else
- value= (float)RNA_property_boolean_get(&ptr, prop);
+ value= (float)RNA_property_boolean_get(&ptr, prop);
break;
case PROP_INT:
- if (RNA_property_array_length(&ptr, prop))
- value= (float)RNA_property_int_get_index(&ptr, prop, index);
- else
- value= (float)RNA_property_int_get(&ptr, prop);
+ value= (float)RNA_property_int_get(&ptr, prop);
break;
case PROP_FLOAT:
- if (RNA_property_array_length(&ptr, prop))
- value= RNA_property_float_get_index(&ptr, prop, index);
- else
- value= RNA_property_float_get(&ptr, prop);
+ value= RNA_property_float_get(&ptr, prop);
break;
case PROP_ENUM:
value= (float)RNA_property_enum_get(&ptr, prop);
break;
default:
break;
+ }
}
+
}
else {
if (G.f & G_DEBUG)
More information about the Bf-blender-cvs
mailing list