From f9f99c4889ca595b48104a0ab77ad78c0ddea619 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Fri, 12 Feb 2021 16:46:49 +0100 Subject: [PATCH] Improving 3MF import: checking for invalid data. --- src/libslic3r/Format/3mf.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index ba6878ac6..f555c26c4 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -685,12 +685,12 @@ namespace Slic3r { close_zip_reader(&archive); - for (const IdToModelObjectMap::value_type& object : m_objects) - { - ModelObject *model_object = m_model->objects[object.second]; - ObjectMetadata::VolumeMetadataList volumes; - ObjectMetadata::VolumeMetadataList* volumes_ptr = nullptr; - + for (const IdToModelObjectMap::value_type& object : m_objects) { + if (object.second >= m_model->objects.size()) { + add_error("Unable to find object"); + return false; + } + ModelObject* model_object = m_model->objects[object.second]; IdToGeometryMap::const_iterator obj_geometry = m_geometries.find(object.first); if (obj_geometry == m_geometries.end()) { @@ -1396,8 +1396,11 @@ namespace Slic3r { bool _3MF_Importer::_handle_end_model() { // deletes all non-built or non-instanced objects - for (const IdToModelObjectMap::value_type& object : m_objects) - { + for (const IdToModelObjectMap::value_type& object : m_objects) { + if (object.second >= m_model->objects.size()) { + add_error("Unable to find object"); + return false; + } ModelObject *model_object = m_model->objects[object.second]; if ((model_object != nullptr) && (model_object->instances.size() == 0)) m_model->delete_object(model_object);