mirror of
https://github.com/QuasarApp/LIEF.git
synced 2025-05-13 03:39:34 +00:00
Resolve #253
This commit is contained in:
parent
13ad81e743
commit
9e04d0b118
@ -343,7 +343,20 @@ std::string ResourcesManager::manifest(void) const {
|
||||
[] (const ResourceNode& node) {
|
||||
return static_cast<RESOURCE_TYPES>(node.id()) == RESOURCE_TYPES::MANIFEST;
|
||||
});
|
||||
const ResourceData* manifest_node = dynamic_cast<ResourceData*>(&((*it_manifest).childs()[0].childs()[0]));
|
||||
|
||||
// First level of child nodes
|
||||
it_childs childs_l1 = it_manifest->childs();
|
||||
if (childs_l1.size() < 1) {
|
||||
throw not_found("Manifest corrupted");
|
||||
}
|
||||
|
||||
it_childs childs_l2 = childs_l1[0].childs();
|
||||
|
||||
if (childs_l2.size() < 1) {
|
||||
throw not_found("Manifest corrupted");
|
||||
}
|
||||
|
||||
const ResourceData* manifest_node = dynamic_cast<ResourceData*>(&childs_l2[0]);
|
||||
const std::vector<uint8_t>& content = manifest_node->content();
|
||||
return std::string{std::begin(content), std::end(content)};
|
||||
}
|
||||
@ -396,7 +409,19 @@ ResourceVersion ResourcesManager::version(void) const {
|
||||
return static_cast<RESOURCE_TYPES>(node.id()) == RESOURCE_TYPES::VERSION;
|
||||
});
|
||||
|
||||
const ResourceData* version_node = dynamic_cast<ResourceData*>(&((*it_version).childs()[0].childs()[0]));
|
||||
// First level of child nodes
|
||||
it_childs childs_l1 = it_version->childs();
|
||||
if (childs_l1.size() < 1) {
|
||||
throw not_found("Resource version corrupted");
|
||||
}
|
||||
|
||||
it_childs childs_l2 = childs_l1[0].childs();
|
||||
|
||||
if (childs_l2.size() < 1) {
|
||||
throw not_found("Resource version corrupted");
|
||||
}
|
||||
|
||||
const ResourceData* version_node = dynamic_cast<ResourceData*>(&childs_l2[0]);
|
||||
const std::vector<uint8_t>& content = version_node->content();
|
||||
VectorStream stream{content};
|
||||
ResourceVersion version;
|
||||
@ -772,8 +797,12 @@ std::vector<ResourceIcon> ResourcesManager::icons(void) const {
|
||||
LOG(ERROR) << "Unable to find the icon associated with id: " << std::to_string(id);
|
||||
continue;
|
||||
}
|
||||
// TODO: add checks
|
||||
const std::vector<uint8_t>& pixels = dynamic_cast<const ResourceData*>(&(it_icon_dir->childs()[0]))->content();
|
||||
it_childs icons_childs = it_icon_dir->childs();
|
||||
if (icons_childs.size() < 1) {
|
||||
LOG(ERROR) << "Resources nodes loooks corrupted";
|
||||
continue;
|
||||
}
|
||||
const std::vector<uint8_t>& pixels = dynamic_cast<const ResourceData*>(&icons_childs[0])->content();
|
||||
icon.pixels_ = pixels;
|
||||
|
||||
icons.push_back(icon);
|
||||
@ -816,7 +845,20 @@ void ResourcesManager::add_icon(const ResourceIcon& icon) {
|
||||
}
|
||||
|
||||
// Add to the GROUP
|
||||
ResourceData* icon_group_node = dynamic_cast<ResourceData*>(&((*it_grp_icon).childs()[0].childs()[0]));
|
||||
|
||||
// First level of child nodes
|
||||
it_childs childs_l1 = it_icon->childs();
|
||||
if (childs_l1.size() < 1) {
|
||||
throw not_found("Icon corrupted");
|
||||
}
|
||||
|
||||
it_childs childs_l2 = childs_l1[0].childs();
|
||||
|
||||
if (childs_l2.size() < 1) {
|
||||
throw not_found("Icon version corrupted");
|
||||
}
|
||||
|
||||
ResourceData* icon_group_node = dynamic_cast<ResourceData*>(&childs_l2[0]);
|
||||
std::vector<uint8_t> icon_group_content = icon_group_node->content();
|
||||
|
||||
pe_resource_icon_dir* group_icon_header = reinterpret_cast<pe_resource_icon_dir*>(icon_group_content.data());
|
||||
|
Loading…
x
Reference in New Issue
Block a user