4
0
mirror of https://github.com/QuasarApp/LIEF.git synced 2025-05-09 02:09:34 +00:00

Fix infinite loop

This commit is contained in:
Romain Thomas 2018-02-15 11:35:02 +01:00
parent 2042b750e0
commit b9237bf027

@ -140,8 +140,63 @@ void JsonVisitor::visit(const Binary& binary) {
if (binary.has_configuration()) {
JsonVisitor visitor;
const LoadConfiguration& config = binary.load_configuration();
config.accept(visitor);
visitor.visit(config);
WIN_VERSION version = config.version();
switch(version) {
case WIN_VERSION::WIN_SEH:
{
visitor(*dynamic_cast<const LoadConfigurationV0*>(&config));
break;
}
case WIN_VERSION::WIN8_1:
{
visitor(*dynamic_cast<const LoadConfigurationV1*>(&config));
break;
}
case WIN_VERSION::WIN10_0_9879:
{
visitor(*dynamic_cast<const LoadConfigurationV2*>(&config));
break;
}
case WIN_VERSION::WIN10_0_14286:
{
visitor(*dynamic_cast<const LoadConfigurationV3*>(&config));
break;
}
case WIN_VERSION::WIN10_0_14383:
{
visitor(*dynamic_cast<const LoadConfigurationV4*>(&config));
break;
}
case WIN_VERSION::WIN10_0_14901:
{
visitor(*dynamic_cast<const LoadConfigurationV5*>(&config));
break;
}
case WIN_VERSION::WIN10_0_15002:
{
visitor(*dynamic_cast<const LoadConfigurationV6*>(&config));
break;
}
case WIN_VERSION::WIN10_0_16237:
{
visitor(*dynamic_cast<const LoadConfigurationV7*>(&config));
break;
}
case WIN_VERSION::WIN_UNKNOWN:
default:
{
visitor(config);
}
}
this->node_["load_configuration"] = visitor.get();
}
@ -680,12 +735,13 @@ void JsonVisitor::visit(const LoadConfiguration& config) {
this->node_["reserved1"] = config.reserved1();
this->node_["editlist"] = config.editlist();
this->node_["security_cookie"] = config.security_cookie();
config.accept(*this);
}
void JsonVisitor::visit(const LoadConfigurationV0& config) {
this->node_["se_handler_table"] = config.se_handler_table();
this->node_["se_handler_count"] = config.se_handler_count();
this->visit(static_cast<const LoadConfiguration&>(config));
}
void JsonVisitor::visit(const LoadConfigurationV1& config) {