diff options
-rw-r--r-- | src/ideviceinstaller.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/ideviceinstaller.c b/src/ideviceinstaller.c index 8f5ec5e..bde9d97 100644 --- a/src/ideviceinstaller.c +++ b/src/ideviceinstaller.c @@ -631,7 +631,24 @@ run_again: plist_t info = NULL; zbuf = NULL; len = 0; - if (zip_get_contents(zf, "Info.plist", ZIP_FL_NODIR, &zbuf, &len) < 0) { + char filename[256]; + + /* check for "Payload" directory */ + strcpy(filename, zip_get_name(zf, 0, 0)); + if (strcmp(filename, "Payload") != 0) { + fprintf(stderr, "Unable to locate Payload folder in archive!\n"); + zip_unchange_all(zf); + zip_close(zf); + goto leave_cleanup; + } + + /* check for "*.app" directory */ + strcpy(filename, zip_get_name(zf, 1, 0)); + + /* construct full filename to Info.plist */ + strcat(filename, "Info.plist"); + + if (zip_get_contents(zf, filename, 0, &zbuf, &len) < 0) { zip_unchange_all(zf); zip_close(zf); goto leave_cleanup; |