Revision
115476
Author
jeremyhu@macports.org
Date
2014-01-02 16:21:35 -0800 (Thu, 02 Jan 2014)

Log Message

rev-upgrade: Silence invalid "Premature end of data, possibly corrupt file" warnings

It's not an error if fail to load the n+1-th load command when there were only n.

Modified Paths

Diff

Modified: trunk/base/src/machista1.0/libmachista.c (115475 => 115476)


--- trunk/base/src/machista1.0/libmachista.c	2014-01-02 23:59:27 UTC (rev 115475)
+++ trunk/base/src/machista1.0/libmachista.c	2014-01-03 00:21:35 UTC (rev 115476)
@@ -339,15 +339,21 @@
     mat->mat_arch = swap32(header->cputype);
 
     /* Parse the Mach-O load commands */
-    const struct load_command *cmd = macho_offset(input, header, header_size, sizeof(struct load_command));
-    if (cmd == NULL)
-        return MACHO_ERANGE;
     uint32_t ncmds = swap32(header->ncmds);
 
+    /* Setup to jump over the header on the first pass through instead of the previous command */
+    const struct load_command *cmd = (void *)header;
+    uint32_t cmdsize = header_size;
+
     /* Iterate over the load commands */
     for (uint32_t i = 0; i < ncmds; i++) {
+        /* Load the next command */
+        cmd = macho_offset(input, cmd, cmdsize, sizeof(struct load_command));
+        if (cmd == NULL)
+            return MACHO_ERANGE;
+
         /* Load the full command */
-        uint32_t cmdsize = swap32(cmd->cmdsize);
+        cmdsize = swap32(cmd->cmdsize);
         cmd = macho_read(input, cmd, cmdsize);
         if (cmd == NULL)
             return MACHO_ERANGE;
@@ -426,11 +432,6 @@
             default:
                 break;
         }
-
-        /* Load the next command */
-        cmd = macho_offset(input, cmd, cmdsize, sizeof(struct load_command));
-        if (cmd == NULL)
-            return MACHO_ERANGE;
     }
 
     return MACHO_SUCCESS;