[Extractor-gtk-cvslog] SF.net SVN: extractor-gtk: [66] trunk/extractor/generic.c
Extract files from unusual archive formats
Brought to you by:
someone-guy
From: <som...@us...> - 2008-02-26 17:18:01
|
Revision: 66 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=66&view=rev Author: someone-guy Date: 2008-02-26 09:17:51 -0800 (Tue, 26 Feb 2008) Log Message: ----------- Add cab detection, make flash detection have less false positives Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2008-02-22 23:00:03 UTC (rev 65) +++ trunk/extractor/generic.c 2008-02-26 17:17:51 UTC (rev 66) @@ -65,6 +65,16 @@ break; } switch (t & 0xffffffff) { + case TAG('M', 'S', 'C', 'F'): { + uint32_t unk = read_le32(in); + uint32_t size = read_le32(in); + fseek(in, -8, SEEK_CUR); + add_entry(&list, cnt, "cab"); + list[cnt].start = ftell(in) - 4; + list[cnt].len = size; + cnt++; + break; + } case TAG('R', 'I', 'F', 'F'): { uint32_t len = read_le32(in); uint32_t type = read_le32(in); @@ -97,14 +107,19 @@ case TAG(0, 'F', 'W', 'S'): // compressed flash. Note that length is _decompressed_ size // so we will extract more data than necessary - case TAG(0, 'C', 'W', 'S'): + case TAG(0, 'C', 'W', 'S'): { + uint8_t ver = fgetc(in); + uint32_t size = read_le32(in); + uint8_t rectbits = fgetc(in) >> 3; + fseek(in, -6, SEEK_CUR); + if ((ver & 0xf0) || rectbits != 15) + break; add_entry(&list, cnt, "swf"); list[cnt].start = ftell(in) - 3; - fgetc(in); - list[cnt].len = read_le32(in); - fseek(in, -5, SEEK_CUR); + list[cnt].len = size; cnt++; break; + } case TAG(0, 'B', 'Z', 'h'): if (bz2idx >= 0 && list[bz2idx].len == 0) { list[bz2idx].start = ftell(in) - 3; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |