MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / zip_parse_data_desc

Function zip_parse_data_desc

src/file_zip.c:928–953  ·  view source on GitHub ↗

@ @ requires \valid(fr); @ requires \valid(fr->handle); @ requires fr->file_size < 0x8000000000000000; @ requires \separated(fr, fr->handle, &errno, &Frama_C_entropy_source); @ ensures \result == -1 || \result == 0; @ assigns *fr->handle, fr->file_size, errno, Frama_C_entropy_source; @*/

Source from the content-addressed store, hash-verified

926 @ assigns *fr->handle, fr->file_size, errno, Frama_C_entropy_source;
927 @*/
928static int zip_parse_data_desc(file_recovery_t *fr)
929{
930 char buffer[sizeof(struct zip_desc)];
931 const struct zip_desc *desc=(const struct zip_desc *)&buffer;
932 if (fread(&buffer, sizeof(buffer), 1, fr->handle) != 1)
933 {
934#ifdef DEBUG_ZIP
935 log_trace("zip: Unexpected EOF reading header of data_desc\n");
936#endif
937 return -1;
938 }
939#if defined(__FRAMAC__)
940 Frama_C_make_unknown(buffer, sizeof(buffer));
941#endif
942 fr->file_size += sizeof(struct zip_desc);
943#ifdef DEBUG_ZIP
944 log_info("compressed_size=%u/%lu uncompressed_size=%u CRC32=0x%08X\n",
945 le32(desc->compressed_size),
946 expected_compressed_size,
947 le32(desc->uncompressed_size),
948 le32(desc->crc32));
949#endif
950 if(le32(desc->compressed_size)!=expected_compressed_size)
951 return -1;
952 return 0;
953}
954
955/*@
956 @ requires \valid(fr);

Callers 2

file_check_zipFunction · 0.85
file_rename_zipFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected