A dirty hack to treat some specific version 0x020004b0
as major 6 (and above) instead of major 0, that
effectively would be treated as major 5, which is wrong
in this case and would lead to an abort.
See data1.{cab,hdr} unzipped from epson321902eu.exe
downloaded from
http://esupport.epson-europe.com/Redirect.aspx?lng=en-GB&url=ftp%3a%2f%2fdownload.epson-europe.com%2fpub%2fdownload%2f3219%2fepson321902eu.exe&id=321902&ct=1&data=YZnBT5wk60ZdJVJ+U002FqpOSsgN3bTG2DXH
via
http://esupport.epson-europe.com/FileDetails.aspx?lng=en-GB&data=YZnBT5wk60ZdJVJ+U002FqpOSsgN3bTG2DXH&id=321902
TODO: identify proper versioning, I have no knowledge of
the IS file format.
Patch to treat IS version 0x020004b0 as major 6
I concur, I separately arrived at the same conclusion with a different cab file.
This may not be the correct fix but it would certainly have resolved my problem.
Perhaps best fix is to simply default to highest known version number rather than lowest when the version number cannot be parsed. That's more likely to be robust.
On the other hand, the data files for the game "The Feeble Files" contains as version "0x01000004", which is treated as major version 0, and needs to be handled as version 5....
Of course these two versions obviously differ in the topmost byte. Maybe the version check just needs to be extended by a really_major_version? ;) Or rather, unshield_read_headers() maybe should look at the value of
(header->common.version >> 24) & 0xf;
instead of just doing
header->major_version = (header->common.version >> 12) & 0xf;
I also stumbled over a file with a new header, 0x02000578 in my case. Manually setting major number 9 for that header worked as expected.
When viewing the corresponding setup.exe it claims to be a "InstallShield ProductVersion 14.0 Internal Build Number 62562" file (http://www.looki.de/downloads/the_whispered_world_demo_v2_file_f38019.html for reference), while the file from above claims to be an "InstallShield ProductVersion 12.0" file.
It definitely seems a new handling for these new header types is required. While two files definitely don't qualify as a representative sample it seems quite sure that "0x02" starts the new header :-)
I haven't found any further InstallShield archives with the new header yet. In the meantime it probably would be a good idea to either set the highest known version number as the default value as Martin suggested, or to introduce a new command line switch so set the version manually.
InstallShield Version 11 seems to be the last version with the old header format (detected as version 9 by unshield).
The file mentioned in http://sourceforge.net/tracker/?func=detail&aid=1924929&group_id=30550&atid=399601 (InstallShield 12) also has 0x020004b0 in the version field.
Please try the latest unshield from the Subversion repository!