| author | Christophe Grenier <grenier@cgsecurity.org> | 2010-05-21 07:12:53 (GMT) |
|---|---|---|
| committer | Christophe Grenier <grenier@cgsecurity.org> | 2010-05-21 07:12:53 (GMT) |
| commit | 13055f4694b0d02bda8ec7f6320cd362be566546 (patch) | |
| tree | 38d36743b8ed45bc187261e7f85dab70a7a1c2de | |
| parent | 297ed6ffb6109c2f43afdd40efc530aa226c385d (diff) | |
PhotoRec: recover Synchronized Multimedia Integration Language .smil
- VBooKMark .url
- utf-8 .xml
- Java Application Descriptor .jad
| -rw-r--r-- | src/file_txt.c | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/src/file_txt.c b/src/file_txt.c index 1d55c90..7dcd7a3 100644 --- a/src/file_txt.c +++ b/src/file_txt.c @@ -58,11 +58,12 @@ static int data_check_txt(const unsigned char *buffer, const unsigned int buffer static void file_check_emlx(file_recovery_t *file_recovery); static void file_check_ers(file_recovery_t *file_recovery); static void file_check_svg(file_recovery_t *file_recovery); +static void file_check_smil(file_recovery_t *file_recovery); static void file_check_xml(file_recovery_t *file_recovery); const file_hint_t file_hint_fasttxt= { .extension="tx?", - .description="Text files with header: rtf,xml,xhtml,mbox/imm,pm,ram,reg,sh,slk,stp", + .description="Text files with header: rtf,xml,xhtml,mbox/imm,pm,ram,reg,sh,slk,stp,jad,url", .min_header_distance=0, .max_filesize=PHOTOREC_MAX_FILE_SIZE, .recover=1, @@ -91,6 +92,7 @@ static const unsigned char header_emka[16] = { '1', '\t', '\t', '\t', '\t', '\t' static const unsigned char header_ers[19] = "DatasetHeader Begin"; static const unsigned char header_ics[15] = "BEGIN:VCALENDAR"; static const unsigned char header_imm[13] = {'M','I','M','E','-','V','e','r','s','i','o','n',':'}; +static const unsigned char header_jad[9] = { 'M', 'I', 'D', 'l', 'e', 't', '-', '1', ':'}; static const unsigned char header_json[31] = { '{', '"', 't', 'i', 't', 'l', 'e', '"', ':', '"', '"', ',', '"', 'i', 'd', '"', @@ -137,6 +139,7 @@ static const unsigned char header_rpp[16] = { '<', 'R', 'E', 'A', 'P', 'E', 'R', static const unsigned char header_rtf[5] = { '{','\\','r','t','f'}; static const unsigned char header_sh[9] = "#!/bin/sh"; static const unsigned char header_slk[10] = "ID;PSCALC3"; +static const unsigned char header_smil[6] = "<smil>"; static const unsigned char header_stl[6] = "solid "; static const unsigned char header_stp[13] = "ISO-10303-21;"; static const unsigned char header_url[18] = { @@ -146,12 +149,14 @@ static const unsigned char header_url[18] = { }; static const unsigned char header_wpl[21] = { '<', '?', 'w', 'p', 'l', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', '=', '"', '1', '.', '0', '"', '?', '>' }; static const unsigned char header_xml[14] = "<?xml version="; +static const unsigned char header_xml_utf8[17] = {0xef, 0xbb, 0xbf, '<', '?', 'x', 'm', 'l', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', '='}; static const unsigned char header_xmp[35] = { '<', 'x', ':', 'x', 'm', 'p', 'm', 'e', 't', 'a', ' ', 'x', 'm', 'l', 'n', 's', ':', 'x', '=', '"', 'a', 'd', 'o', 'b', 'e', ':', 'n', 's', ':', 'm', 'e', 't', 'a', '/', '"'}; +static const unsigned char header_vbookmark[10] = { 'B', 'E', 'G', 'I', 'N', ':', 'V', 'B', 'K', 'M'}; static const char sign_java1[6] = "class"; static const char sign_java3[15] = "private static"; static const char sign_java4[17] = "public interface"; @@ -174,6 +179,7 @@ static void register_header_check_fasttxt(file_stat_t *file_stat) register_header_check(0, header_ers,sizeof(header_ers), &header_check_fasttxt, file_stat); register_header_check(0, header_ics, sizeof(header_ics), &header_check_fasttxt, file_stat); register_header_check(0, header_imm,sizeof(header_imm), &header_check_fasttxt, file_stat); + register_header_check(0, header_jad, sizeof(header_jad), &header_check_fasttxt, file_stat); register_header_check(0, header_json, sizeof(header_json), &header_check_fasttxt, file_stat); register_header_check(0, header_ksh,sizeof(header_ksh), &header_check_fasttxt, file_stat); register_header_check(0, header_lyx,sizeof(header_lyx), &header_check_fasttxt, file_stat); @@ -195,12 +201,15 @@ static void register_header_check_fasttxt(file_stat_t *file_stat) register_header_check(0, header_rtf,sizeof(header_rtf), &header_check_fasttxt, file_stat); register_header_check(0, header_sh,sizeof(header_sh), &header_check_fasttxt, file_stat); register_header_check(0, header_slk,sizeof(header_slk), &header_check_fasttxt, file_stat); + register_header_check(0, header_smil,sizeof(header_smil), &header_check_fasttxt, file_stat); register_header_check(0, header_stl,sizeof(header_stl), &header_check_fasttxt, file_stat); register_header_check(0, header_stp,sizeof(header_stp), &header_check_fasttxt, file_stat); register_header_check(0, header_url,sizeof(header_url), &header_check_fasttxt, file_stat); register_header_check(0, header_wpl,sizeof(header_wpl), &header_check_fasttxt, file_stat); register_header_check(0, header_xml,sizeof(header_xml), &header_check_fasttxt, file_stat); + register_header_check(0, header_xml_utf8,sizeof(header_xml_utf8), &header_check_fasttxt, file_stat); register_header_check(0, header_xmp,sizeof(header_xmp), &header_check_fasttxt, file_stat); + register_header_check(0, header_vbookmark, sizeof(header_vbookmark), &header_check_fasttxt, file_stat); } // #define DEBUG_FILETXT @@ -596,7 +605,8 @@ static int header_check_fasttxt(const unsigned char *buffer, const unsigned int file_recovery_new->extension="ram"; return 1; } - if(memcmp(buffer,header_xml,sizeof(header_xml))==0) + if(memcmp(buffer, header_xml, sizeof(header_xml))==0 || + memcmp(buffer, header_xml_utf8, sizeof(header_xml_utf8))==0) { reset_file_recovery(file_recovery_new); file_recovery_new->data_check=&data_check_txt; @@ -692,6 +702,16 @@ static int header_check_fasttxt(const unsigned char *buffer, const unsigned int free(buffer2); return 1; } + /* Java Application Descriptor + * http://en.wikipedia.org/wiki/JAD_%28file_format%29 */ + if(memcmp(buffer, header_jad, sizeof(header_jad))==0) + { + reset_file_recovery(file_recovery_new); + file_recovery_new->data_check=&data_check_txt; + file_recovery_new->file_check=&file_check_size; + file_recovery_new->extension="jad"; + return 1; + } /* Lyx http://www.lyx.org */ if(memcmp(buffer, header_lyx, sizeof(header_lyx))==0) { @@ -750,6 +770,16 @@ static int header_check_fasttxt(const unsigned char *buffer, const unsigned int file_recovery_new->extension="cue"; return 1; } + /* Synchronized Multimedia Integration Language + * http://en.wikipedia.org/wiki/Synchronized_Multimedia_Integration_Language */ + if(memcmp(buffer, header_smil, sizeof(header_smil))==0) + { + reset_file_recovery(file_recovery_new); + file_recovery_new->data_check=&data_check_txt; + file_recovery_new->file_check=&file_check_smil; + file_recovery_new->extension="smil"; + return 1; + } if(memcmp(buffer,header_xmp,sizeof(header_xmp))==0 && !(file_recovery!=NULL && file_recovery->file_stat!=NULL && (file_recovery->file_stat->file_hint==&file_hint_pdf || @@ -762,6 +792,14 @@ static int header_check_fasttxt(const unsigned char *buffer, const unsigned int file_recovery_new->extension="xmp"; return 1; } + if(memcmp(buffer, header_vbookmark, sizeof(header_vbookmark))==0) + { + reset_file_recovery(file_recovery_new); + file_recovery_new->data_check=&data_check_txt; + file_recovery_new->file_check=&file_check_size; + file_recovery_new->extension="url"; + return 1; + } return 0; } @@ -1140,6 +1178,13 @@ static void file_check_emlx(file_recovery_t *file_recovery) } } +static void file_check_smil(file_recovery_t *file_recovery) +{ + const unsigned char smil_footer[7]= { '<', '/', 's', 'm', 'i', 'l', '>'}; + file_search_footer(file_recovery, smil_footer, sizeof(smil_footer), 0); + file_allow_nl(file_recovery, NL_BARENL|NL_CRLF|NL_BARECR); +} + static void file_check_xml(file_recovery_t *file_recovery) { const unsigned char xml_footer[1]= { '>'}; |
