Menu

#74 Unshield fails to extract Feeble Files data1.cab

closed-wont-fix
Unshield (10)
5
2014-08-20
2006-02-11
Bodo Bellut
No

There are single-volume InstallShield cabs, consisting
just of data1.cab (and _sys1.cab and _user1.cab),
unshield is able to list the content of those cabs, but
fails to extract the files. This is the output of
unshield trying to extract the files from the Feeble
Files CD (english) data1.cab:

[bodo@nermal cab]$ unshield -D 3 x data1.cab
[unshield_fopen_for_reading:59] File data1.hdr not
found even case insensitive

[unshield_read_headers:232] Could not open .hdr file 1.
Reading header from .cab file 1 instead.
[unshield_read_headers:281] Version 0x01000004 handled
as major version 0
[unshield_get_cab_descriptor:81] Cabinet descriptor:
00000752 000044ab 000044ab 00000004
[unshield_get_cab_descriptor:83] Directory count: 1
[unshield_get_cab_descriptor:84] File count: 319
[unshield_file_group_new:15] File group descriptor
offset: 0000032a
[unshield_file_group_new:30] File group 0000032a first
file = 0, last file = 65536
[unshield_fopen_for_reading:59] File data2.hdr not
found even case insensitive

[unshield_read_headers:232] Could not open .hdr file 2.
Reading header from .cab file 2 instead.
[unshield_fopen_for_reading:59] File data2.cab not
found even case insensitive

Cabinet: data1.cab
extracting: ./Essential_Game_Files/0011.VGA
[unshield_fopen_for_reading:59] File data2.cab not
found even case insensitive

[unshield_reader_open_volume:267] Failed to open input
cabinet file 2
[unshield_reader_read:485] Failed to open volume 2 to
read 543 more bytes
Failed to extract file '0011.VGA'.
extracting: ./Essential_Game_Files/0012.VGA
[unshield_file_save:658] Decompression failed with code
-3. bytes_to_read=23220, volume_bytes_left=112414, volume=1
Failed to extract file '0012.VGA'.

and so on, most files get "Failed to open input cabinet
2", some get "Decompression failed".

This is with version 0.5 as well as the CVS-version
from today (2006-02-11).

Discussion

  • David Eriksson

    David Eriksson - 2006-02-11

    Logged In: YES
    user_id=337437

    Are you really sure there is no data2.cab? The game comes on
    4 CD:s, right?

    Anyway, if I were to debug this I would need data*.cab...

     
  • Bodo Bellut

    Bodo Bellut - 2006-02-13

    Logged In: YES
    user_id=286617

    Yes, I'm sure. CDs 2 to 4 only contain game data, CD 1
    additionaly contains the installer.
    Files I think belong to the installer:

    DATA.TAG
    SETUP.EXE
    SETUP.INI
    _INST32.EX_
    _ISDEL.EXE
    _SETUP.DLL
    _sys1.cab
    _user1.cab
    data1.cab
    dsetup.dll
    dsetup16.dll
    dsetup32.dll
    lang.dat
    layout.bin
    os.dat
    setup.bmp
    setup.ins
    setup.lid

    I'll contact you provately for the files.

     
  • Nobody/Anonymous

    Logged In: NO

    I see this bug as well with the Feeble Files.

    Mine is a 2 CD version, but neither CD contains data2.cab.

    The 0.5 and CVS versions can show the file list from
    data1.cab but the same errors as previously reported are
    seen when trying to extract.

     
  • Nobody/Anonymous

    Logged In: NO

    Further note :

    strings on SETUP.EXE and SETUP.DLL from Feeble Files shows
    Installshield V 5.00.212.0

    but unshield 0.5 reports :
    [unshield_read_headers:281] Version 0x01000004 handled as
    major version 0

    Could the wrong major version cause this fault?

    Am going to check the installer with wine to see that it is
    extractable and this isn't a duff batch of CDs, although
    this seems unlikely.

     
  • Nobody/Anonymous

    Logged In: NO

    Tried 0.5 with the following patch :
    ___

    --- lib/libunshield.c.old 2006-06-08
    01:19:29.000000000 +0100
    +++ lib/libunshield.c 2006-06-08 01:10:52.000000000 +0100
    @@ -271,10 +271,8 @@

    header->major_version = (header->common.version >>
    12) & 0xf;

    -#if 0
    if (header->major_version < 5)
    header->major_version = 5;
    -#endif

    unshield_trace("Version 0x%08x handled as major
    version %i",
    header->common.version,

    ___

    This results in the cab being treated as V5 as below :

    [unshield_read_headers:279] Version 0x01000004 handled as
    major version 5

    but this still does not allow successful extraction

     
  • David Eriksson

    David Eriksson - 2006-06-08

    Logged In: YES
    user_id=337437

    The problem with Feeble Files that the version of
    InstallShield used by this installation uses a different
    compression library than every other I've seen!

    Usually zlib is used, but this installation uses the PKWARE
    Data Compression Library. I have some support to decompress
    that one in a library called Dynamite [1] but it couldn't
    extract the files right away when I tried.

    You may find it easier to install the program in Wine [2]
    (worked fine for me) and then do whatever you like with the
    installed files.

    [1] http://synce.sourceforge.net/synce/dynamite.php
    [2] http://winehq.com

     
  • Nobody/Anonymous

    Logged In: NO

    Thanks for this.

    The following link is googled documentation for the PKWARE
    DCL format.

    Hope this might help this become supported in the future.

    http://datacompression.info/LZSS.shtml

     
  • kirben

    kirben - 2006-06-11

    Logged In: YES
    user_id=34715

    Could the source code of i5comp be used as reference, for
    adding support for decompressing this data1.cab file? since
    i5comp is able to unpack the file, without any problems.

    The i5comp21.rar package of i5comp, includes the source
    code.

     
  • David Eriksson

    David Eriksson - 2006-06-11

    Logged In: YES
    user_id=337437

    As seen on http://synce.sourceforge.net/synce/dynamite.php I
    used the newsgroup information about the PKWARE DCL format
    for the Dynamite library and tool but I couldn't get it to
    work with the Feeble Files' compressed data when I tried,
    maybe because the library does not support all combinations
    of compression supported by the PKWARE DCL format.

    It might be an idea to patch Unshield to simply extract the
    compressed data and then see if the Dynamite tool and
    library can be adjusted to extract the data.

     
  • David Eriksson

    David Eriksson - 2006-06-11

    Logged In: YES
    user_id=337437

    Kirben: IIRC, the primary reason that i5comp only works on
    Windows is that it uses InstallShield's own decompression
    DLL to perform the actual decompression...

     
  • David Eriksson

    David Eriksson - 2006-06-11

    Logged In: YES
    user_id=337437

    I decided to have a look at this again (I even got a mail
    about it from Steffen Pankratz... :-)

    Anyway, all my previous statements are probably wrong,
    wrong, wrong. This is most likely not the special PKWARE
    Data Compression Library algorithm. Instead it is very, very
    similar to zlib, but not exactly. I still havent made zlib
    to decompress it happily though...

     
  • Eugene Sandulenko

    Logged In: YES
    user_id=166507
    Originator: NO

    any news on this?

     
  • David Eriksson

    David Eriksson - 2007-01-05

    Logged In: YES
    user_id=337437
    Originator: NO

    No news, sorry.

    I can provide the compressed data from the .cab file if you are able to find a compression guru to help you understand the difference between this and all other cabinets that Unshield decompress with zlib.

     
  • David Eriksson

    David Eriksson - 2007-01-05
    • summary: Unshield failes with single-volume cab --> Unshield fails to extract Feeble Files data1.cab
     
  • Jonny Lamb

    Jonny Lamb - 2007-04-12

    Logged In: YES
    user_id=1043774
    Originator: NO

    Marking bug as "Wont Fix" as there is little, or no, development on Unshield these days.

    Feel free to re-open the bug if you feel it is necessary.

    Regards,

     
  • Jonny Lamb

    Jonny Lamb - 2007-04-12
    • status: open --> closed-wont-fix
     
  • Gregory Montoir

    Gregory Montoir - 2007-05-17

    Logged In: YES
    user_id=230314
    Originator: NO

    With the following change (or hack :) in unshield/lib/file.c :

    - err = inflate(&stream, Z_BLOCK);
    + err = inflate(&stream, Z_SYNC_FLUSH);

    I am able to decompress the files from the .cab files of the french version of Feeble Files (which is based on IS 5.00.212.0), using the "old compression" setting (ie. unshield -O x data1.cab).

    Note: Z_SYNC_FLUSH is exactly what the original IS DLL (ZD50149.DLL) uses to do the decompression.

     
  • David Eriksson

    David Eriksson - 2007-05-17

    Logged In: YES
    user_id=337437
    Originator: NO

    Z_BLOCK or Z_SYNC_FLUSH does not make any difference for me, neither allows me to extract Qtime.smk from the english version (data1.cab MD5 sum 42eab1588c9523657ae90c1afb2d97f8) of Feeble Files... :-(

     
  • Max Horn

    Max Horn - 2009-05-25

    Actually, it *does* work, if one combines cyx' patch with that older patch which forces header->major_version = 5 -- after applying those two changes, I just managed to extract my copy of the Feeble files!

    Would be great if this could be added to SVN / a future unshield release :)

     

Log in to post a comment.