diff --git a/src/Magnum/MeshTools/CombineIndexedArrays.h b/src/Magnum/MeshTools/CombineIndexedArrays.h index 7bb3fe65b..4feb71e9a 100644 --- a/src/Magnum/MeshTools/CombineIndexedArrays.h +++ b/src/Magnum/MeshTools/CombineIndexedArrays.h @@ -32,6 +32,7 @@ #include #include #include +#include #include "Magnum/Types.h" #include "Magnum/MeshTools/visibility.h" @@ -122,10 +123,14 @@ namespace Implementation { MAGNUM_MESHTOOLS_EXPORT std::pair, std::vector> interleaveAndCombineIndexArrays(const std::reference_wrapper>* begin, const std::reference_wrapper>* end); template void writeCombinedArray(const UnsignedInt stride, const UnsignedInt offset, const std::vector& interleavedCombinedIndexArrays, std::vector& array) { + /* Can't use duplicate() here because we aren't accessing the index data sequentially */ std::vector output; output.reserve(interleavedCombinedIndexArrays.size()/stride); - for(std::size_t i = 0, max = interleavedCombinedIndexArrays.size()/stride; i != max; ++i) - output.push_back(array[interleavedCombinedIndexArrays[offset + i*stride]]); + for(std::size_t i = 0, max = interleavedCombinedIndexArrays.size()/stride; i != max; ++i) { + const UnsignedInt index = interleavedCombinedIndexArrays[offset + i*stride]; + CORRADE_ASSERT(index < array.size(), "MeshTools::combineIndexedArrays(): index out of range", ); + output.push_back(array[index]); + } std::swap(output, array); }