Revision: 115476 https://trac.macports.org/changeset/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: -------------- trunk/base/src/machista1.0/libmachista.c Modified: trunk/base/src/machista1.0/libmachista.c =================================================================== --- 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;