extractor-gtk-cvslog Mailing List for Obscure-Extractor-GTK (Page 4)
Extract files from unusual archive formats
Brought to you by:
someone-guy
You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(8) |
Sep
(19) |
Oct
(1) |
Nov
|
Dec
|
2008 |
Jan
|
Feb
(19) |
Mar
(6) |
Apr
(6) |
May
(2) |
Jun
|
Jul
|
Aug
(31) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <som...@us...> - 2008-02-19 20:08:43
|
Revision: 49 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=49&view=rev Author: someone-guy Date: 2008-02-19 12:08:39 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Support finding and extracting PNG files Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2008-02-19 20:08:31 UTC (rev 48) +++ trunk/extractor/generic.c 2008-02-19 20:08:39 UTC (rev 49) @@ -43,12 +43,29 @@ static file_t *get_list(FILE *in) { register buffer_t t = 0; int bz2idx = -1; + int pngidx = -1; int cnt = 0; file_t *list = calloc(1, sizeof(file_t)); rewind(in); while (!feof(in) && cnt + 3 < SIZE_MAX / sizeof(file_t)) { int i; t = t << 8 | fgetc(in); + switch (t) { + case HUGETAG(0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a): + if (pngidx >= 0 && list[pngidx].len == 0) { + list[pngidx].start = ftell(in) - 8; + break; + } + add_entry(&list, cnt, "png"); + list[cnt].start = ftell(in) - 8; + pngidx = cnt; + cnt++; + break; + case HUGETAG(0, 0, 0, 0, 'I', 'E', 'N', 'D'): + if (pngidx >= 0) + list[pngidx].len = ftell(in) - list[pngidx].start + 4; + break; + } switch (t & 0xffffffff) { case TAG('R', 'I', 'F', 'F'): { uint32_t len = read_le32(in); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2008-02-19 20:08:35
|
Revision: 48 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=48&view=rev Author: someone-guy Date: 2008-02-19 12:08:31 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Make TAG macro safer and add HUGETAG Modified Paths: -------------- trunk/extractor/helpers.h Modified: trunk/extractor/helpers.h =================================================================== --- trunk/extractor/helpers.h 2007-10-03 21:25:23 UTC (rev 47) +++ trunk/extractor/helpers.h 2008-02-19 20:08:31 UTC (rev 48) @@ -6,7 +6,8 @@ uint32_t peek_le32(FILE *f); uint32_t read_be32(FILE *f); int fcopy(FILE *in, FILE *out, int len); -#define TAG(a, b, c, d) ((uint32_t)(a << 8 | b) << 16 | (c << 8 | d)) +#define TAG(a, b, c, d) ((uint32_t)((a) << 8 | (b)) << 16 | ((c) << 8 | (d))) +#define HUGETAG(a, b, c, d, e, f, g, h) (((uint64_t)(TAG(a, b, c, d)) << 32) | TAG(e, f, g, h)) struct file_s; void default_free_list(struct file_s *list); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-10-03 21:25:25
|
Revision: 47 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=47&view=rev Author: someone-guy Date: 2007-10-03 14:25:23 -0700 (Wed, 03 Oct 2007) Log Message: ----------- Detect zip end-of-directory markers Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 14:41:16 UTC (rev 46) +++ trunk/extractor/generic.c 2007-10-03 21:25:23 UTC (rev 47) @@ -61,6 +61,22 @@ cnt++; break; } + case TAG('P', 'K', 5, 6): { + uint64_t offset; + uint16_t comment_len; + fseek(in, 8, SEEK_CUR); + offset = read_le32(in); // size of central directory + offset += read_le32(in); // offset of central directory + offset += 4; // PK.. + comment_len = read_le16(in); // comment length + fseek(in, -18, SEEK_CUR); + if (offset > ftell(in)) + break; + add_entry(&list, cnt, "zip"); + list[cnt].start = ftell(in) - offset; + list[cnt].len = offset + 18 + comment_len; + cnt++; + } } switch (t & 0xffffff) { case TAG(0, 'F', 'W', 'S'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 14:41:17
|
Revision: 46 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=46&view=rev Author: someone-guy Date: 2007-09-16 07:41:16 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Ignore possible bzip2-headers where we could not find any block end code Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 14:00:04 UTC (rev 45) +++ trunk/extractor/generic.c 2007-09-16 14:41:16 UTC (rev 46) @@ -75,6 +75,10 @@ cnt++; break; case TAG(0, 'B', 'Z', 'h'): + if (bz2idx >= 0 && list[bz2idx].len == 0) { + list[bz2idx].start = ftell(in) - 3; + break; + } add_entry(&list, cnt, "bz2"); list[cnt].start = ftell(in) - 3; bz2idx = cnt; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 14:00:07
|
Revision: 45 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=45&view=rev Author: someone-guy Date: 2007-09-16 07:00:04 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Support compressed flash (note that this will extract more data than necessary) Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 13:59:57 UTC (rev 44) +++ trunk/extractor/generic.c 2007-09-16 14:00:04 UTC (rev 45) @@ -64,6 +64,9 @@ } switch (t & 0xffffff) { 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'): add_entry(&list, cnt, "swf"); list[cnt].start = ftell(in) - 3; fgetc(in); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 13:59:58
|
Revision: 44 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=44&view=rev Author: someone-guy Date: 2007-09-16 06:59:57 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Fix reading flash size Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 13:48:45 UTC (rev 43) +++ trunk/extractor/generic.c 2007-09-16 13:59:57 UTC (rev 44) @@ -66,7 +66,9 @@ case TAG(0, 'F', 'W', 'S'): add_entry(&list, cnt, "swf"); list[cnt].start = ftell(in) - 3; - list[cnt].len = peek_le32(in); + fgetc(in); + list[cnt].len = read_le32(in); + fseek(in, -5, SEEK_CUR); cnt++; break; case TAG(0, 'B', 'Z', 'h'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 13:48:47
|
Revision: 43 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=43&view=rev Author: someone-guy Date: 2007-09-16 06:48:45 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Fix wrong length for RIFF Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 13:48:34 UTC (rev 42) +++ trunk/extractor/generic.c 2007-09-16 13:48:45 UTC (rev 43) @@ -57,7 +57,7 @@ if (len <= 4 || !is_valid_fourcc(type)) break; add_entry(&list, cnt, "riff"); list[cnt].start = ftell(in) - 4; - list[cnt].len = len; + list[cnt].len = len + 8; cnt++; break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 13:48:42
|
Revision: 42 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=42&view=rev Author: someone-guy Date: 2007-09-16 06:48:34 -0700 (Sun, 16 Sep 2007) Log Message: ----------- RIFF-check with less false positives Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 11:43:44 UTC (rev 41) +++ trunk/extractor/generic.c 2007-09-16 13:48:34 UTC (rev 42) @@ -26,6 +26,18 @@ *list = l; } +static int is_valid_fourcc(uint32_t id) { + static const char valid_chars[] = + "0123456789abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ_ "; + int i; + for (i = 0; i < 4; i++) { + if (!strchr(valid_chars, id)) return 0; + id >>= 8; + } + return 1; +} + typedef uint64_t buffer_t; static file_t *get_list(FILE *in) { @@ -38,12 +50,17 @@ int i; t = t << 8 | fgetc(in); switch (t & 0xffffffff) { - case TAG('R', 'I', 'F', 'F'): + case TAG('R', 'I', 'F', 'F'): { + uint32_t len = read_le32(in); + uint32_t type = read_le32(in); + fseek(in, -8, SEEK_CUR); + if (len <= 4 || !is_valid_fourcc(type)) break; add_entry(&list, cnt, "riff"); list[cnt].start = ftell(in) - 4; - list[cnt].len = peek_le32(in); + list[cnt].len = len; cnt++; break; + } } switch (t & 0xffffff) { case TAG(0, 'F', 'W', 'S'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 11:43:56
|
Revision: 40 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=40&view=rev Author: someone-guy Date: 2007-09-16 04:43:35 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Move variable into appropriate block Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 11:03:30 UTC (rev 39) +++ trunk/extractor/generic.c 2007-09-16 11:43:35 UTC (rev 40) @@ -30,12 +30,12 @@ static file_t *get_list(FILE *in) { register buffer_t t = 0; - int i; int bz2idx = -1; int cnt = 0; file_t *list = calloc(1, sizeof(file_t)); rewind(in); while (!feof(in) && cnt + 3 < SIZE_MAX / sizeof(file_t)) { + int i; t = t << 8 | fgetc(in); switch (t & 0xffffffff) { case TAG('R', 'I', 'F', 'F'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 11:43:56
|
Revision: 41 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=41&view=rev Author: someone-guy Date: 2007-09-16 04:43:44 -0700 (Sun, 16 Sep 2007) Log Message: ----------- More restrictive bmp detection Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 11:43:35 UTC (rev 40) +++ trunk/extractor/generic.c 2007-09-16 11:43:44 UTC (rev 41) @@ -66,12 +66,23 @@ break; } switch (t & 0xffff) { - case TAG(0, 0, 'B', 'M'): + case TAG(0, 0, 'B', 'M'): { + uint32_t len = read_le32(in); + uint16_t res1 = read_le16(in); + uint16_t res2 = read_le16(in); + uint32_t dataoff = read_le32(in); + uint32_t bisize = read_le32(in); + fseek(in, -16, SEEK_CUR); + if (bisize < 40 || bisize > 1024*1024 || + dataoff < bisize + 14 || len < dataoff || + len > 1024*1024*1024) + break; add_entry(&list, cnt, "bmp"); list[cnt].start = ftell(in) - 2; - list[cnt].len = peek_le32(in); + list[cnt].len = len; cnt++; break; + } case 0xffd9: for (i = 0; i < cnt; i++) { if (list[i].priv == (void *)1 && list[i].len == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 11:03:35
|
Revision: 39 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=39&view=rev Author: someone-guy Date: 2007-09-16 04:03:30 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Fix comment to match latest changes Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 11:01:15 UTC (rev 38) +++ trunk/extractor/generic.c 2007-09-16 11:03:30 UTC (rev 39) @@ -80,8 +80,8 @@ break; } if (bz2idx >= 0) { - // bzip2 block end marker, between 25 and 32 bits of it are used - // change these and t to 64 bit for more accurate detection + // bzip2 block end marker, only between 25 and 32 bits of it are used + // if buffer_t is changed to only 32 bits, otherwise all 48 bits buffer_t endmark = 0x177245385090ULL; buffer_t mask = 0xffffffffffffULL; for (i = 0; i < 8; i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 11:01:17
|
Revision: 38 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=38&view=rev Author: someone-guy Date: 2007-09-16 04:01:15 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Switch detection to 64 bit max. length Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 11:01:08 UTC (rev 37) +++ trunk/extractor/generic.c 2007-09-16 11:01:15 UTC (rev 38) @@ -26,7 +26,7 @@ *list = l; } -typedef uint32_t buffer_t; +typedef uint64_t buffer_t; static file_t *get_list(FILE *in) { register buffer_t t = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 11:01:10
|
Revision: 37 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=37&view=rev Author: someone-guy Date: 2007-09-16 04:01:08 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Make it easy to change format of detection ringbuffer Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 11:01:01 UTC (rev 36) +++ trunk/extractor/generic.c 2007-09-16 11:01:08 UTC (rev 37) @@ -26,8 +26,10 @@ *list = l; } +typedef uint32_t buffer_t; + static file_t *get_list(FILE *in) { - register uint32_t t = 0; + register buffer_t t = 0; int i; int bz2idx = -1; int cnt = 0; @@ -35,7 +37,7 @@ rewind(in); while (!feof(in) && cnt + 3 < SIZE_MAX / sizeof(file_t)) { t = t << 8 | fgetc(in); - switch (t) { + switch (t & 0xffffffff) { case TAG('R', 'I', 'F', 'F'): add_entry(&list, cnt, "riff"); list[cnt].start = ftell(in) - 4; @@ -80,8 +82,8 @@ if (bz2idx >= 0) { // bzip2 block end marker, between 25 and 32 bits of it are used // change these and t to 64 bit for more accurate detection - uint32_t endmark = 0x177245385090ULL; - uint32_t mask = 0xffffffffffffULL; + buffer_t endmark = 0x177245385090ULL; + buffer_t mask = 0xffffffffffffULL; for (i = 0; i < 8; i++) { if ((t & mask) == endmark) { // end marker plus space for CRC This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 11:01:05
|
Revision: 36 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=36&view=rev Author: someone-guy Date: 2007-09-16 04:01:01 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Add detection of end of bzip2 file Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 10:35:34 UTC (rev 35) +++ trunk/extractor/generic.c 2007-09-16 11:01:01 UTC (rev 36) @@ -29,6 +29,7 @@ static file_t *get_list(FILE *in) { register uint32_t t = 0; int i; + int bz2idx = -1; int cnt = 0; file_t *list = calloc(1, sizeof(file_t)); rewind(in); @@ -52,6 +53,7 @@ case TAG(0, 'B', 'Z', 'h'): add_entry(&list, cnt, "bz2"); list[cnt].start = ftell(in) - 3; + bz2idx = cnt; cnt++; break; case 0xffd8ff: @@ -75,6 +77,21 @@ } break; } + if (bz2idx >= 0) { + // bzip2 block end marker, between 25 and 32 bits of it are used + // change these and t to 64 bit for more accurate detection + uint32_t endmark = 0x177245385090ULL; + uint32_t mask = 0xffffffffffffULL; + for (i = 0; i < 8; i++) { + if ((t & mask) == endmark) { + // end marker plus space for CRC + list[bz2idx].len = ftell(in) - list[i].start + 4; + break; + } + endmark <<= 1; + mask <<= 1; + } + } } return list; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 10:35:35
|
Revision: 35 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=35&view=rev Author: someone-guy Date: 2007-09-16 03:35:34 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Do not set values to 0 that are already initialized in that way Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 10:35:26 UTC (rev 34) +++ trunk/extractor/generic.c 2007-09-16 10:35:34 UTC (rev 35) @@ -52,13 +52,11 @@ case TAG(0, 'B', 'Z', 'h'): add_entry(&list, cnt, "bz2"); list[cnt].start = ftell(in) - 3; - list[cnt].len = 0; cnt++; break; case 0xffd8ff: add_entry(&list, cnt, "jpg"); list[cnt].start = ftell(in) - 3; - list[cnt].len = 0; list[cnt].priv = (void *)1; cnt++; break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 10:35:28
|
Revision: 34 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=34&view=rev Author: someone-guy Date: 2007-09-16 03:35:26 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Support finding bz2-headers, not length detection (and thus no extraction) yet Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-16 10:29:42 UTC (rev 33) +++ trunk/extractor/generic.c 2007-09-16 10:35:26 UTC (rev 34) @@ -49,6 +49,12 @@ list[cnt].len = peek_le32(in); cnt++; break; + case TAG(0, 'B', 'Z', 'h'): + add_entry(&list, cnt, "bz2"); + list[cnt].start = ftell(in) - 3; + list[cnt].len = 0; + cnt++; + break; case 0xffd8ff: add_entry(&list, cnt, "jpg"); list[cnt].start = ftell(in) - 3; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 10:29:43
|
Revision: 33 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=33&view=rev Author: someone-guy Date: 2007-09-16 03:29:42 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Support giving a file name on the command line Modified Paths: -------------- trunk/extractor/extractor.c Modified: trunk/extractor/extractor.c =================================================================== --- trunk/extractor/extractor.c 2007-09-16 10:29:33 UTC (rev 32) +++ trunk/extractor/extractor.c 2007-09-16 10:29:42 UTC (rev 33) @@ -278,6 +278,8 @@ gtk_window_set_default_size(GTK_WINDOW(window), -1, 400); gtk_widget_show_all(window); + if (argc > 1) + open_file(argv[1], NULL); gtk_main(); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 10:29:34
|
Revision: 32 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=32&view=rev Author: someone-guy Date: 2007-09-16 03:29:33 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Default to generic format if none is given Modified Paths: -------------- trunk/extractor/extractor.c Modified: trunk/extractor/extractor.c =================================================================== --- trunk/extractor/extractor.c 2007-09-16 10:29:26 UTC (rev 31) +++ trunk/extractor/extractor.c 2007-09-16 10:29:33 UTC (rev 32) @@ -112,6 +112,8 @@ } static int open_file(char *fname, fmt_desc_t *fmt) { + if (!fmt) + fmt = &generic_fmt; // close previous file and free its data if (cur_fmt && flist) cur_fmt->free_list(flist); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 10:29:27
|
Revision: 31 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=31&view=rev Author: someone-guy Date: 2007-09-16 03:29:26 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Factor out the file open function from the gui code Modified Paths: -------------- trunk/extractor/extractor.c Modified: trunk/extractor/extractor.c =================================================================== --- trunk/extractor/extractor.c 2007-09-16 10:29:17 UTC (rev 30) +++ trunk/extractor/extractor.c 2007-09-16 10:29:26 UTC (rev 31) @@ -111,6 +111,24 @@ } } +static int open_file(char *fname, fmt_desc_t *fmt) { + // close previous file and free its data + if (cur_fmt && flist) + cur_fmt->free_list(flist); + flist = NULL; + cur_fmt = fmt; + if (input_file) + fclose(input_file); + + // open new file + input_file = fopen(fname, "rb"); + if (!input_file) + return 0; + flist = cur_fmt->get_list(input_file); + set_treeview(flist); + return 1; +} + /** * \brief called when a new archive is selected */ @@ -126,24 +144,12 @@ goto err_out; } - // close previous file and free its data - if (cur_fmt && flist) - cur_fmt->free_list(flist); - flist = NULL; - cur_fmt = *fmt; - if (input_file) - fclose(input_file); - - // open new file - input_file = fopen(fname, "rb"); - if (!input_file) { + if (!open_file(fname, *fmt)) { SHOW_MSG(GTK_MESSAGE_ERROR, _("Error opening file '%s': %s"), fname, g_strerror(errno)); goto err_out; } g_free(fname); - flist = cur_fmt->get_list(input_file); - set_treeview(flist); return; err_out: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-16 10:29:18
|
Revision: 30 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=30&view=rev Author: someone-guy Date: 2007-09-16 03:29:17 -0700 (Sun, 16 Sep 2007) Log Message: ----------- Add and use a peek_le32 function Modified Paths: -------------- trunk/extractor/generic.c trunk/extractor/helpers.c trunk/extractor/helpers.h Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-15 23:08:02 UTC (rev 29) +++ trunk/extractor/generic.c 2007-09-16 10:29:17 UTC (rev 30) @@ -38,7 +38,7 @@ case TAG('R', 'I', 'F', 'F'): add_entry(&list, cnt, "riff"); list[cnt].start = ftell(in) - 4; - list[cnt].len = read_le32(in); + list[cnt].len = peek_le32(in); cnt++; break; } @@ -46,7 +46,7 @@ case TAG(0, 'F', 'W', 'S'): add_entry(&list, cnt, "swf"); list[cnt].start = ftell(in) - 3; - list[cnt].len = read_le32(in); + list[cnt].len = peek_le32(in); cnt++; break; case 0xffd8ff: @@ -61,7 +61,7 @@ case TAG(0, 0, 'B', 'M'): add_entry(&list, cnt, "bmp"); list[cnt].start = ftell(in) - 2; - list[cnt].len = read_le32(in); + list[cnt].len = peek_le32(in); cnt++; break; case 0xffd9: Modified: trunk/extractor/helpers.c =================================================================== --- trunk/extractor/helpers.c 2007-09-15 23:08:02 UTC (rev 29) +++ trunk/extractor/helpers.c 2007-09-16 10:29:17 UTC (rev 30) @@ -37,6 +37,13 @@ return (t[3] << 8 | t[2]) << 16 | (t[1] << 8 | t[0]); } +//! as read_le32 but do not advance file pointer +uint32_t peek_le32(FILE *f) { + uint32_t res = read_le32(f); + fseek(f, -4, SEEK_CUR); + return res; +} + //! read a 32 bit big-endian value from file uint32_t read_be32(FILE *f) { unsigned char t[4]; Modified: trunk/extractor/helpers.h =================================================================== --- trunk/extractor/helpers.h 2007-09-15 23:08:02 UTC (rev 29) +++ trunk/extractor/helpers.h 2007-09-16 10:29:17 UTC (rev 30) @@ -3,6 +3,7 @@ char *read_cstring(FILE *f); uint16_t read_le16(FILE *f); uint32_t read_le32(FILE *f); +uint32_t peek_le32(FILE *f); uint32_t read_be32(FILE *f); int fcopy(FILE *in, FILE *out, int len); #define TAG(a, b, c, d) ((uint32_t)(a << 8 | b) << 16 | (c << 8 | d)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-15 23:08:04
|
Revision: 29 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=29&view=rev Author: someone-guy Date: 2007-09-15 16:08:02 -0700 (Sat, 15 Sep 2007) Log Message: ----------- Add very simple code to find and extract JPEG-data Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-09-15 23:07:54 UTC (rev 28) +++ trunk/extractor/generic.c 2007-09-15 23:08:02 UTC (rev 29) @@ -28,6 +28,7 @@ static file_t *get_list(FILE *in) { register uint32_t t = 0; + int i; int cnt = 0; file_t *list = calloc(1, sizeof(file_t)); rewind(in); @@ -48,6 +49,13 @@ list[cnt].len = read_le32(in); cnt++; break; + case 0xffd8ff: + add_entry(&list, cnt, "jpg"); + list[cnt].start = ftell(in) - 3; + list[cnt].len = 0; + list[cnt].priv = (void *)1; + cnt++; + break; } switch (t & 0xffff) { case TAG(0, 0, 'B', 'M'): @@ -56,6 +64,12 @@ list[cnt].len = read_le32(in); cnt++; break; + case 0xffd9: + for (i = 0; i < cnt; i++) { + if (list[i].priv == (void *)1 && list[i].len == 0) + list[i].len = ftell(in) - list[i].start; + } + break; } } return list; @@ -67,6 +81,6 @@ "*", check_file, get_list, - default_free_list, + default_free_ignorepriv, default_extract_file, }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-09-15 23:07:56
|
Revision: 28 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=28&view=rev Author: someone-guy Date: 2007-09-15 16:07:54 -0700 (Sat, 15 Sep 2007) Log Message: ----------- Add a default free function that does not free priv data, so it can be misused to directly store int data. Modified Paths: -------------- trunk/extractor/helpers.c trunk/extractor/helpers.h Modified: trunk/extractor/helpers.c =================================================================== --- trunk/extractor/helpers.c 2007-08-30 10:56:42 UTC (rev 27) +++ trunk/extractor/helpers.c 2007-09-15 23:07:54 UTC (rev 28) @@ -92,6 +92,17 @@ } /** + * \brief default free function for file list, which does not try to free priv data + * \param list list to free + */ +void default_free_ignorepriv(file_t *list) { + file_t *i; + for (i = list; i->name; i++) + free(i->name); + free(list); +} + +/** * \brief default file-extract function * \param in archive file * \param file description struct of file to extract Modified: trunk/extractor/helpers.h =================================================================== --- trunk/extractor/helpers.h 2007-08-30 10:56:42 UTC (rev 27) +++ trunk/extractor/helpers.h 2007-09-15 23:07:54 UTC (rev 28) @@ -9,5 +9,6 @@ struct file_s; void default_free_list(struct file_s *list); +void default_free_ignorepriv(struct file_s *list); int default_extract_file(FILE *in, struct file_s *file, FILE *out); #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-08-30 10:56:48
|
Revision: 27 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=27&view=rev Author: someone-guy Date: 2007-08-30 03:56:42 -0700 (Thu, 30 Aug 2007) Log Message: ----------- SWF detection for generic format Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-08-30 10:56:33 UTC (rev 26) +++ trunk/extractor/generic.c 2007-08-30 10:56:42 UTC (rev 27) @@ -41,6 +41,14 @@ cnt++; break; } + switch (t & 0xffffff) { + case TAG(0, 'F', 'W', 'S'): + add_entry(&list, cnt, "swf"); + list[cnt].start = ftell(in) - 3; + list[cnt].len = read_le32(in); + cnt++; + break; + } switch (t & 0xffff) { case TAG(0, 0, 'B', 'M'): add_entry(&list, cnt, "bmp"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-08-30 10:56:35
|
Revision: 24 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=24&view=rev Author: someone-guy Date: 2007-08-30 03:56:22 -0700 (Thu, 30 Aug 2007) Log Message: ----------- Safety check against too many entries Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-08-01 02:44:18 UTC (rev 23) +++ trunk/extractor/generic.c 2007-08-30 10:56:22 UTC (rev 24) @@ -22,7 +22,7 @@ int cnt = 0; file_t *list = calloc(1, sizeof(file_t)); rewind(in); - while (!feof(in)) { + while (!feof(in) && cnt + 3 < SIZE_MAX / sizeof(file_t)) { t = t << 8 | fgetc(in); switch (t) { case TAG('R', 'I', 'F', 'F'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <som...@us...> - 2007-08-30 10:56:34
|
Revision: 26 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=26&view=rev Author: someone-guy Date: 2007-08-30 03:56:33 -0700 (Thu, 30 Aug 2007) Log Message: ----------- Simplify Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2007-08-30 10:56:28 UTC (rev 25) +++ trunk/extractor/generic.c 2007-08-30 10:56:33 UTC (rev 26) @@ -42,7 +42,7 @@ break; } switch (t & 0xffff) { - case TAG(' ', ' ', 'B', 'M') & 0xffff: + case TAG(0, 0, 'B', 'M'): add_entry(&list, cnt, "bmp"); list[cnt].start = ftell(in) - 2; list[cnt].len = read_le32(in); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |