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; | 
