summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Grenier <[email protected]>2021-02-28 12:33:30 +0100
committerChristophe Grenier <[email protected]>2021-02-28 12:33:30 +0100
commit8b8389e76ea1379a4a1d7ecc2e87d74f397ccced (patch)
treeb7d8beacc9c253cc14c5473504d12d498268de98
parent2e47a667ea32ad4e683c18b075a41cfa77f52e42 (diff)
src/file_psf.c: add Frama-C annotations
-rw-r--r--src/file_psf.c14
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=&register_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;