From 1f0ee68f006e2a1d8a370705c4b583681496aeb2 Mon Sep 17 00:00:00 2001 From: Christophe Grenier Date: Sun, 10 Mar 2013 16:04:34 +0100 Subject: [PATCH] PhotoRec: stricter .nsf check --- src/file_nsf.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/file_nsf.c b/src/file_nsf.c index 67d07be9..ade09e2a 100644 --- a/src/file_nsf.c +++ b/src/file_nsf.c @@ -31,7 +31,6 @@ #include "filegen.h" static void register_header_check_nsf(file_stat_t *file_stat); -static int header_check_nsf(const unsigned char *buffer, const unsigned int buffer_size, const unsigned int safe_header_only, const file_recovery_t *file_recovery, file_recovery_t *file_recovery_new); const file_hint_t file_hint_nsf= { .extension="nsf", @@ -43,22 +42,21 @@ const file_hint_t file_hint_nsf= { .register_header_check=®ister_header_check_nsf }; -static const unsigned char nsf_header[6]= { - 0x1a, 0x00, 0x00, 0x04, 0x00, 0x00 -}; +static int header_check_nsf(const unsigned char *buffer, const unsigned int buffer_size, const unsigned int safe_header_only, const file_recovery_t *file_recovery, file_recovery_t *file_recovery_new) +{ + /* I hope it's a valid check */ + if(buffer[0x10]!=0x25 || buffer[0x11]!=0x85) + return 0; + reset_file_recovery(file_recovery_new); + file_recovery_new->extension=file_hint_nsf.extension; + return 1; +} static void register_header_check_nsf(file_stat_t *file_stat) { + static const unsigned char nsf_header[6]= { + 0x1a, 0x00, 0x00, 0x04, 0x00, 0x00 + }; register_header_check(0, nsf_header, sizeof(nsf_header), &header_check_nsf, file_stat); } -static int header_check_nsf(const unsigned char *buffer, const unsigned int buffer_size, const unsigned int safe_header_only, const file_recovery_t *file_recovery, file_recovery_t *file_recovery_new) -{ - if(memcmp(buffer, nsf_header, sizeof(nsf_header))==0) - { - reset_file_recovery(file_recovery_new); - file_recovery_new->extension=file_hint_nsf.extension; - return 1; - } - return 0; -}