Fix use of uninitialized memory in BKE_scene_objects_as_gset
Share macro for setting BLI_Iterator defaults to ensure
this doesn't happen again in cases the ITER_* macros aren't used.
Oversight in 14d74fb341
.
This commit is contained in:
parent
3d7e3d5ad0
commit
71da3f31d4
|
@ -2033,8 +2033,9 @@ void BKE_scene_collections_iterator_begin(BLI_Iterator *iter, void *data_in)
|
|||
CollectionsIteratorData *data = MEM_callocN(sizeof(CollectionsIteratorData), __func__);
|
||||
|
||||
data->scene = scene;
|
||||
|
||||
BLI_ITERATOR_INIT(iter);
|
||||
iter->data = data;
|
||||
iter->valid = true;
|
||||
|
||||
scene_collections_array(scene, (Collection ***)&data->array, &data->tot);
|
||||
BLI_assert(data->tot != 0);
|
||||
|
@ -2079,6 +2080,8 @@ typedef struct SceneObjectsIteratorData {
|
|||
static void scene_objects_iterator_begin(BLI_Iterator *iter, Scene *scene, GSet *visited_objects)
|
||||
{
|
||||
SceneObjectsIteratorData *data = MEM_callocN(sizeof(SceneObjectsIteratorData), __func__);
|
||||
|
||||
BLI_ITERATOR_INIT(iter);
|
||||
iter->data = data;
|
||||
|
||||
/* Lookup list to make sure that each object is only processed once. */
|
||||
|
|
|
@ -34,13 +34,19 @@ typedef struct BLI_Iterator {
|
|||
typedef void (*IteratorCb)(BLI_Iterator *iter);
|
||||
typedef void (*IteratorBeginCb)(BLI_Iterator *iter, void *data_in);
|
||||
|
||||
#define BLI_ITERATOR_INIT(iter) \
|
||||
{ \
|
||||
(iter)->skip = false; \
|
||||
(iter)->valid = true; \
|
||||
} \
|
||||
((void)0)
|
||||
|
||||
#define ITER_BEGIN(callback_begin, callback_next, callback_end, _data_in, _type, _instance) \
|
||||
{ \
|
||||
_type _instance; \
|
||||
IteratorCb callback_end_func = callback_end; \
|
||||
BLI_Iterator iter_macro; \
|
||||
iter_macro.skip = false; \
|
||||
iter_macro.valid = true; \
|
||||
BLI_ITERATOR_INIT(&iter_macro); \
|
||||
for (callback_begin(&iter_macro, (_data_in)); iter_macro.valid; callback_next(&iter_macro)) { \
|
||||
if (iter_macro.skip) { \
|
||||
iter_macro.skip = false; \
|
||||
|
|
|
@ -778,7 +778,6 @@ static void rna_Scene_objects_begin(CollectionPropertyIterator *iter, PointerRNA
|
|||
Scene *scene = (Scene *)ptr->data;
|
||||
iter->internal.custom = MEM_callocN(sizeof(BLI_Iterator), __func__);
|
||||
|
||||
((BLI_Iterator *)iter->internal.custom)->valid = true;
|
||||
BKE_scene_objects_iterator_begin(iter->internal.custom, (void *)scene);
|
||||
iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue