fix [#28460] SEGFAULT when trying to make empty display as image
authorCampbell Barton <ideasman42@gmail.com>
Fri, 2 Sep 2011 08:20:30 +0000 (08:20 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 2 Sep 2011 08:20:30 +0000 (08:20 +0000)
source/blender/editors/animation/anim_filter.c

index 8010a41ccb334c87e1bd58cf9ef0312a7258f514..bb710a3279420bef13fb01152246db120960f81b 100644 (file)
@@ -1177,29 +1177,34 @@ static size_t animfilter_nla (bAnimContext *UNUSED(ac), ListBase *anim_data, bDo
 /* determine what animation data from AnimData block should get displayed */
 static size_t animfilter_block_data (bAnimContext *ac, ListBase *anim_data, bDopeSheet *ads, ID *id, int filter_mode)
 {
-       IdAdtTemplate *iat = (IdAdtTemplate*)id;
        AnimData *adt = BKE_animdata_from_id(id);
        size_t items = 0;
-       
-       /* NOTE: this macro is used instead of inlining the logic here, since this sort of filtering is still needed 
-        * in a few places in he rest of the code still - notably for the few cases where special mode-based 
-        * different types of data expanders are required.
-        */
-       ANIMDATA_FILTER_CASES(iat,
-               { /* AnimData */
-                       /* specifically filter animdata block */
-                       ANIMCHANNEL_NEW_CHANNEL(adt, ANIMTYPE_ANIMDATA, id);
-               },
-               { /* NLA */
-                       items += animfilter_nla(ac, anim_data, ads, adt, filter_mode, id); 
-               },
-               { /* Drivers */
-                       items += animfilter_fcurves(anim_data, ads, adt->drivers.first, NULL, filter_mode, id);
-               },
-               { /* Keyframes */
-                       items += animfilter_action(ac, anim_data, ads, adt->action, filter_mode, id);
-               });
-       
+
+       /* image object datablocks have no anim-data so check for NULL */
+       if(adt) {
+               IdAdtTemplate *iat = (IdAdtTemplate*)id;
+
+               /* NOTE: this macro is used instead of inlining the logic here, since this sort of filtering is still needed
+                * in a few places in he rest of the code still - notably for the few cases where special mode-based
+                * different types of data expanders are required.
+                */
+               ANIMDATA_FILTER_CASES(iat,
+                       { /* AnimData */
+                               /* specifically filter animdata block */
+                               ANIMCHANNEL_NEW_CHANNEL(adt, ANIMTYPE_ANIMDATA, id);
+                       },
+                       { /* NLA */
+                               items += animfilter_nla(ac, anim_data, ads, adt, filter_mode, id);
+                       },
+                       { /* Drivers */
+                               items += animfilter_fcurves(anim_data, ads, adt->drivers.first, NULL, filter_mode, id);
+                       },
+                       { /* Keyframes */
+                               items += animfilter_action(ac, anim_data, ads, adt->action, filter_mode, id);
+                       }
+               );
+       }
+
        return items;
 }