diff options
author | Christophe Grenier <[email protected]> | 2021-02-28 12:33:30 +0100 |
---|---|---|
committer | Christophe Grenier <[email protected]> | 2021-02-28 12:33:30 +0100 |
commit | 8b8389e76ea1379a4a1d7ecc2e87d74f397ccced (patch) | |
tree | b7d8beacc9c253cc14c5473504d12d498268de98 | |
parent | 2e47a667ea32ad4e683c18b075a41cfa77f52e42 (diff) |
src/file_psf.c: add Frama-C annotations
-rw-r--r-- | src/file_psf.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/file_psf.c b/src/file_psf.c index 28c817dd..acb4f7c1 100644 --- a/src/file_psf.c +++ b/src/file_psf.c @@ -31,6 +31,7 @@ #include "types.h" #include "filegen.h" +/*@ requires \valid(file_stat); */ static void register_header_check_psf(file_stat_t *file_stat); const file_hint_t file_hint_psf= { @@ -42,8 +43,19 @@ const file_hint_t file_hint_psf= { .register_header_check=®ister_header_check_psf }; +/*@ + @ requires buffer_size >= 32; + @ 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_psf, buffer+(..), file_recovery, file_recovery_new); + @ ensures \result == 0 || \result == 1; + @ ensures \result!=0 ==> valid_file_recovery(file_recovery_new); + @*/ static int header_check_psf(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 uint64_t size=((uint64_t)buffer[28]<<24)+((uint64_t)buffer[29]<<16)+((uint64_t)buffer[30]<<8)+((uint64_t)buffer[31]<<0)+272; if(file_recovery->file_stat!=NULL && file_recovery->file_stat->file_hint==&file_hint_psf) { @@ -52,7 +64,7 @@ static int header_check_psf(const unsigned char *buffer, const unsigned int buff } reset_file_recovery(file_recovery_new); file_recovery_new->extension=file_hint_psf.extension; - file_recovery_new->calculated_file_size=((uint64_t)buffer[28]<<24)+((uint64_t)buffer[29]<<16)+((uint64_t)buffer[30]<<8)+((uint64_t)buffer[31]<<0) + 272; + file_recovery_new->calculated_file_size=size; file_recovery_new->data_check=&data_check_size; file_recovery_new->file_check=&file_check_size; return 1; |