From 2a20bac9f14a02efb250fc1fb8fb8d5040cf9879 Mon Sep 17 00:00:00 2001 From: Christophe Grenier Date: Sun, 14 Mar 2021 15:44:42 +0100 Subject: [PATCH] src/file_xfi.c: add Frama-C annotations --- src/file_xfi.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/file_xfi.c b/src/file_xfi.c index 69a0fc3b..7ed2ca0a 100644 --- a/src/file_xfi.c +++ b/src/file_xfi.c @@ -31,31 +31,42 @@ #include "types.h" #include "filegen.h" +/*@ requires \valid(file_stat); */ static void register_header_check_xfi(file_stat_t *file_stat); -const file_hint_t file_hint_xfi= { - .extension="xfi", - .description="XFI Electronic Fuel Injection Systems", - .max_filesize=PHOTOREC_MAX_FILE_SIZE, - .recover=1, - .enable_by_default=1, - .register_header_check=®ister_header_check_xfi +const file_hint_t file_hint_xfi = { + .extension = "xfi", + .description = "XFI Electronic Fuel Injection Systems", + .max_filesize = PHOTOREC_MAX_FILE_SIZE, + .recover = 1, + .enable_by_default = 1, + .register_header_check = ®ister_header_check_xfi }; +/*@ + @ requires buffer_size > 0; + @ requires \valid_read(buffer+(0..buffer_size-1)); + @ requires valid_file_recovery(file_recovery); + @ requires \valid(file_recovery_new); + @ requires file_recovery_new->blocksize > 0; + @ requires separation: \separated(&file_hint_xfi, buffer+(..), file_recovery, file_recovery_new); + @ ensures \result!=0 ==> valid_file_recovery(file_recovery_new); + @ assigns *file_recovery_new; + @*/ static int header_check_xfi(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) { reset_file_recovery(file_recovery_new); - file_recovery_new->extension=file_hint_xfi.extension; + file_recovery_new->extension = file_hint_xfi.extension; return 1; } static void register_header_check_xfi(file_stat_t *file_stat) { - static const unsigned char xfi_header[0x20]= { - 0x2c, ' ' , 'F' , 'u' , 'e' , 'l' , ' ' , 'A' , - 'i' , 'r' , ' ' , 'S' , 'p' , 'a' , 'r' , 'k' , - ' ' , 'T' , 'e' , 'c' , 'h' , 'n' , 'o' , 'l' , - 'o' , 'g' , 'i' , 'e' , 's' , ' ' , ' ' , ' ' , + static const unsigned char xfi_header[0x20] = { + 0x2c, ' ', 'F', 'u', 'e', 'l', ' ', 'A', + 'i', 'r', ' ', 'S', 'p', 'a', 'r', 'k', + ' ', 'T', 'e', 'c', 'h', 'n', 'o', 'l', + 'o', 'g', 'i', 'e', 's', ' ', ' ', ' ' }; register_header_check(0x10, xfi_header, sizeof(xfi_header), &header_check_xfi, file_stat); }