[Forensics-changes] [yara] 63/160: Stop iterating on resources when resource tables are corrupt.

Hilko Bengen bengen at moszumanska.debian.org
Sat Jul 1 10:29:18 UTC 2017


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag v3.4.0
in repository yara.

commit 29d7c628170b3a42a89ebbeb45c04c2f780ed2e5
Author: Shane Huntley <shuntley at google.com>
Date:   Wed Mar 25 18:00:32 2015 -0700

    Stop iterating on resources when resource tables are corrupt.
---
 libyara/modules/pe.c | 60 ++++++++++++++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 28 deletions(-)

diff --git a/libyara/modules/pe.c b/libyara/modules/pe.c
index 1eb3069..34ab1d1 100644
--- a/libyara/modules/pe.c
+++ b/libyara/modules/pe.c
@@ -476,7 +476,9 @@ int _pe_iterate_resources(
   for (int i = 0; i < total_entries; i++)
   {
     if (!struct_fits_in_pe(pe, entry, IMAGE_RESOURCE_DIRECTORY_ENTRY))
-      break;
+    {
+      return RESOURCE_ITERATOR_ABORTED;
+    }
 
     switch(rsrc_tree_level)
     {
@@ -499,43 +501,45 @@ int _pe_iterate_resources(
       PIMAGE_RESOURCE_DIRECTORY directory = (PIMAGE_RESOURCE_DIRECTORY) \
           (rsrc_data + RESOURCE_OFFSET(entry));
 
-      if (struct_fits_in_pe(pe, directory, IMAGE_RESOURCE_DIRECTORY))
+      if (!struct_fits_in_pe(pe, directory, IMAGE_RESOURCE_DIRECTORY))
       {
-        result = _pe_iterate_resources(
-            pe,
-            directory,
-            rsrc_data,
-            rsrc_tree_level + 1,
-            type,
-            id,
-            language,
-            type_string,
-            name_string,
-            lang_string,
-            callback,
-            callback_data);
-
-        if (result == RESOURCE_ITERATOR_ABORTED)
-          return RESOURCE_ITERATOR_ABORTED;
+        return RESOURCE_ITERATOR_ABORTED;
       }
+
+      result = _pe_iterate_resources(
+          pe,
+          directory,
+          rsrc_data,
+          rsrc_tree_level + 1,
+          type,
+          id,
+          language,
+          type_string,
+          name_string,
+          lang_string,
+          callback,
+          callback_data);
+      if (result == RESOURCE_ITERATOR_ABORTED)
+        return RESOURCE_ITERATOR_ABORTED;
     }
     else
     {
       PIMAGE_RESOURCE_DATA_ENTRY data_entry = (PIMAGE_RESOURCE_DATA_ENTRY) \
           (rsrc_data + RESOURCE_OFFSET(entry));
 
-      if (struct_fits_in_pe(pe, data_entry, IMAGE_RESOURCE_DATA_ENTRY))
+      if (!struct_fits_in_pe(pe, data_entry, IMAGE_RESOURCE_DATA_ENTRY))
       {
-        result = callback(
-            data_entry,
-            *type,
-            *id,
-            *language,
-            type_string,
-            name_string,
-            lang_string,
-            callback_data);
+        return RESOURCE_ITERATOR_ABORTED;
       }
+      result = callback(
+          data_entry,
+          *type,
+          *id,
+          *language,
+          type_string,
+          name_string,
+          lang_string,
+          callback_data);
 
       if (result == RESOURCE_CALLBACK_ABORT)
         return RESOURCE_ITERATOR_ABORTED;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git



More information about the forensics-changes mailing list