summaryrefslogtreecommitdiffstats
path: root/src/file_pdf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/file_pdf.c')
-rw-r--r--src/file_pdf.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/file_pdf.c b/src/file_pdf.c
index 128ebb1d..2a61bb89 100644
--- a/src/file_pdf.c
+++ b/src/file_pdf.c
@@ -58,6 +58,7 @@ const file_hint_t file_hint_pdf= {
};
/*@
+ @ terminates \true;
@ assigns \nothing;
@*/
static int is_hexa(const int c)
@@ -66,6 +67,7 @@ static int is_hexa(const int c)
}
/*@
+ @ terminates \true;
@ assigns \nothing;
@ ensures 0 <= \result <= 15;
@*/
@@ -145,6 +147,7 @@ static void file_rename_pdf(file_recovery_t *file_recovery)
/*@
@ loop invariant 0 <= i <= bsize;
@ loop assigns i;
+ @ loop variant bsize - i;
@ */
for(i=0; i<bsize && buffer[i]==' '; i++);
if(i + 2 >= bsize)
@@ -166,6 +169,7 @@ static void file_rename_pdf(file_recovery_t *file_recovery)
@ loop invariant j <= s;
@ loop invariant j < bsize;
@ loop assigns s, j, buffer[0 .. 512-1];
+ @ loop variant bsize - (s+1);
@ */
for(s=i+1, j=i+1;
s+1<bsize && is_hexa(buffer[s]) && is_hexa(buffer[s+1]);
@@ -188,6 +192,7 @@ static void file_rename_pdf(file_recovery_t *file_recovery)
@ loop invariant l < i;
@ loop invariant \initialized(title + (0 .. l-1));
@ loop assigns i, l, title[0 .. 512-1];
+ @ loop variant bsize - i;
@*/
while(i<bsize)
{
@@ -209,6 +214,7 @@ static void file_rename_pdf(file_recovery_t *file_recovery)
@ loop invariant l < i;
@ loop invariant \initialized(title + (0 .. l-1));
@ loop assigns i, l, title[0 .. 512-1];
+ @ loop variant bsize - (i+1);
@*/
while(i+1 < bsize)
{
@@ -226,6 +232,7 @@ static void file_rename_pdf(file_recovery_t *file_recovery)
@ loop invariant l < i;
@ loop invariant \initialized(title + (0 .. l-1));
@ loop assigns i, l, title[0 .. 512-1];
+ @ loop variant bsize - i;
@*/
while(i<bsize && buffer[i]!=')')
title[l++]=sbuffer[i++];
@@ -277,6 +284,7 @@ static void file_date_pdf(file_recovery_t *file_recovery)
@ loop assigns offset, j, *file_recovery->handle, file_recovery->time, buffer[0..4095];
@ loop assigns errno;
@ loop assigns Frama_C_entropy_source;
+ @ loop variant file_recovery->file_size - offset;
@*/
while(offset < file_recovery->file_size)
{
@@ -295,6 +303,7 @@ static void file_date_pdf(file_recovery_t *file_recovery)
@ loop invariant 0 <= i <= bsize;
@ loop assigns i, j, *file_recovery->handle, file_recovery->time, buffer[0..21];
@ loop assigns errno;
+ @ loop variant bsize - i;
@*/
for(i=0; i<bsize; i++)
{
@@ -363,7 +372,8 @@ static void file_check_pdf_and_size(file_recovery_t *file_recovery)
@ loop assigns *file_recovery->handle, file_recovery->time;
@ loop assigns errno;
@ loop assigns Frama_C_entropy_source;
- @*/
+ @ loop variant i;
+ @*/
for(i=taille-4;i>=0;i--)
{
if(buffer[i]=='%' && buffer[i+1]=='E' && buffer[i+2]=='O' && buffer[i+3]=='F')
@@ -397,13 +407,17 @@ static void file_check_pdf(file_recovery_t *file_recovery)
static uint64_t read_pdf_file_aux(const unsigned char *buffer, unsigned int i)
{
uint64_t file_size=0;
- /*@ loop assigns i; */
+ /*@
+ @ loop assigns i;
+ @ loop variant 512 - i;
+ @*/
while(i < 512 &&
(buffer[i] ==' ' || buffer[i]=='\t' || buffer[i]=='\n' || buffer[i]=='\r'))
i++;
/*@
@ loop invariant file_size <= PHOTOREC_MAX_FILE_SIZE;
@ loop assigns i, file_size;
+ @ loop variant 512 - i;
@ */
for(;i<512 && buffer[i]>='0' && buffer[i]<='9'; i++)
{