Skip to content
Permalink
Browse files
Bug fix when PE resources contain an infinite recursion loop
  • Loading branch information
romainthomas committed May 5, 2017
1 parent abd104e commit a569cc1
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
@@ -93,6 +93,7 @@ class DLL_PUBLIC Parser : public LIEF::Parser {
std::unique_ptr<VectorStream> stream_;
Binary* binary_;
PE_TYPE type_;
std::set<uint32_t> resource_visited_;
};


@@ -273,8 +273,13 @@ ResourceNode* Parser::build_resource_node(
uint32_t rvaToDirectory = rvaToData & (~ 0x80000000);
uint32_t offset = baseOffset + rvaToDirectory;
try {
const auto* nextDirectoryTable = reinterpret_cast<const pe_resource_directory_table*>(
const pe_resource_directory_table* nextDirectoryTable = reinterpret_cast<const pe_resource_directory_table*>(
this->stream_->read(offset, sizeof(pe_resource_directory_table)));
if (this->resource_visited_.count(offset) > 0) {
LOG(WARNING) << "Infinite loop detected on resources";
break;
}
this->resource_visited_.insert(offset);

ResourceNode* node = this->build_resource_node(nextDirectoryTable, baseOffset);
node->id_ = id;

0 comments on commit a569cc1

Please sign in to comment.