Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsupermerill <merill@fr.fr>2022-03-16 19:05:05 +0300
committerremi durand <remi-j.durand@thalesgroup.com>2022-03-17 00:59:10 +0300
commit242316e89def9c12bf744cf676f1bbd8dc13a1c9 (patch)
treee912e7de4da45e7287b8307f26664a09e857a083
parent2b908bc196b4a71cd4c49f16a8283a34924babc7 (diff)
To avoid a crash when the config isn't correct, add a substitution.
-rw-r--r--src/libslic3r/Config.cpp10
-rw-r--r--src/libslic3r/Config.hpp2
2 files changed, 11 insertions, 1 deletions
diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp
index ee3fda467..f05d35d2d 100644
--- a/src/libslic3r/Config.cpp
+++ b/src/libslic3r/Config.cpp
@@ -827,11 +827,19 @@ ConfigSubstitutions ConfigBase::load(const boost::property_tree::ptree &tree, Fo
{
ConfigSubstitutionContext substitutions_ctxt(compatibility_rule);
for (const boost::property_tree::ptree::value_type &v : tree) {
+ t_config_option_key opt_key = v.first;
try {
- t_config_option_key opt_key = v.first;
this->set_deserialize(opt_key, v.second.get_value<std::string>(), substitutions_ctxt);
} catch (UnknownOptionException & /* e */) {
// ignore
+ } catch (BadOptionValueException & e) {
+ if (compatibility_rule == ForwardCompatibilitySubstitutionRule::Disable)
+ throw e;
+ // log the error
+ const ConfigDef* def = this->def();
+ if (def == nullptr) throw e;
+ const ConfigOptionDef* optdef = def->get(opt_key);
+ substitutions_ctxt.substitutions.emplace_back(optdef, v.second.get_value<std::string>(), ConfigOptionUniquePtr(optdef->default_value->clone()));
}
}
return std::move(substitutions_ctxt.substitutions);
diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp
index e2506060e..1feace866 100644
--- a/src/libslic3r/Config.hpp
+++ b/src/libslic3r/Config.hpp
@@ -281,6 +281,8 @@ struct ConfigSubstitution {
const ConfigOptionDef *opt_def { nullptr };
std::string old_value;
ConfigOptionUniquePtr new_value;
+ ConfigSubstitution() = default;
+ ConfigSubstitution(const ConfigOptionDef* def, std::string old, ConfigOptionUniquePtr&& new_v) : opt_def(def), old_value(old), new_value(std::move(new_v)) {}
};
using ConfigSubstitutions = std::vector<ConfigSubstitution>;