diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-11-07 17:50:04 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-11-07 17:50:42 +0300 |
commit | f16199d479189f1f142aebecf896182a7276c483 (patch) | |
tree | 1c8370a36bd8b10abfecb1c84992c871ed5c498a | |
parent | 98ed20aafd60bd31e77b9da6e9b1157987c4fa56 (diff) |
Fix jumps-dependent-on-uninitialized-variable for iterators
We cannot have iter->valid unitialized, but we need to be sure it is set to true on begin.
Bug found by Sergey Sharybin.
-rw-r--r-- | source/blender/blenkernel/intern/layer.c | 1 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_iterator.h | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index f5650874ff0..2e1495b2e11 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -1800,6 +1800,7 @@ void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in) data->iter.set = NULL; + iter->valid = true; iter->data = data_in; BKE_renderable_objects_iterator_next(iter); } diff --git a/source/blender/blenlib/BLI_iterator.h b/source/blender/blenlib/BLI_iterator.h index dffdeec949a..d8929b6e73a 100644 --- a/source/blender/blenlib/BLI_iterator.h +++ b/source/blender/blenlib/BLI_iterator.h @@ -43,10 +43,12 @@ typedef void (*IteratorBeginCb)(BLI_Iterator *iter, void *data_in); IteratorCb callback_end_func = callback_end; \ BLI_Iterator iter_macro; \ iter_macro.skip = false; \ + iter_macro.valid = false; \ for (callback_begin(&iter_macro, (_data_in)); \ iter_macro.valid; \ callback_next(&iter_macro)) \ { \ + BLI_assert(iter_macro.valid); \ if (iter_macro.skip) { \ iter_macro.skip = false; \ continue; \ |