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

Function OLE_parse_summary_aux

src/file_doc.c:1347–1400  ·  view source on GitHub ↗

@ @ requires 48 <= dirLen <= 1024*1024; @ requires \valid_read(dataPt + (0 .. dirLen-1)); @ requires \initialized(dataPt + (0 .. dirLen-1)); @ requires \valid(ext); @ requires \valid(title + (0 .. 1024-1)); @ requires \valid(file_time); @ requires valid_string(title); @ requires *ext == \null || valid_read_string(*ext); @ requires separation: \separated(dataPt+(..), ext, title +

Source from the content-addressed store, hash-verified

1345 @ assigns *ext, *(title + (0..1023)), *file_time;
1346 @*/
1347static void OLE_parse_summary_aux(const char *dataPt, const unsigned int dirLen, const char **ext, char *title, time_t *file_time)
1348{
1349 unsigned int pos;
1350 const unsigned char *udataPt=(const unsigned char *)dataPt;
1351#ifndef DISABLED_FOR_FRAMAC
1352 assert(dirLen >= 48 && dirLen<=1024*1024);
1353#endif
1354 /*@ assert *ext == \null || valid_read_string(*ext); */
1355 /*@ assert valid_string(title); */
1356#ifdef DEBUG_OLE
1357 dump_log(dataPt, dirLen);
1358#endif
1359 /*@ assert \valid_read(udataPt + (0 .. dirLen-1)); */
1360 if(udataPt[0]!=0xfe || udataPt[1]!=0xff)
1361 return ;
1362 pos=get32u(dataPt, 44);
1363 if(pos > dirLen - 8)
1364 {
1365 /*@ assert *ext == \null || valid_read_string(*ext); */
1366 /*@ assert valid_string(title); */
1367 return ;
1368 }
1369 /*@ assert 0 <= pos <= dirLen - 8; */
1370 {
1371 /* PropertySet */
1372 const unsigned int size=get32u(dataPt, pos);
1373 if(size <= 8 || size > dirLen || pos + size > dirLen)
1374 {
1375 /*@ assert *ext == \null || valid_read_string(*ext); */
1376 /*@ assert valid_string(title); */
1377 return ;
1378 }
1379 /*@ assert size > 8 && size <= dirLen && pos + size <= dirLen; */
1380
1381 /*@ assert 0 < dirLen <=1024*1024; */
1382 /*@ assert \valid_read(dataPt + (0 .. dirLen-1)); */
1383 /*@ assert pos + size <= dirLen; */
1384 /*@ assert \valid_read(dataPt + (0 .. pos+size-1)); */
1385 /*@ assert \valid_read(dataPt + pos + (0 .. size-1)); */
1386
1387 /*@ assert 0 < dirLen <=1024*1024; */
1388 /*@ assert \initialized(dataPt + (0 .. dirLen-1)); */
1389 /*@ assert pos + size <= dirLen; */
1390 /*@ ghost int small_dirLen = pos + size; */
1391 /*@ assert small_dirLen <= dirLen; */
1392 /*@ assert \initialized(dataPt + (0 .. small_dirLen-1)); */
1393
1394 /*@ assert *ext == \null || valid_read_string(*ext); */
1395 /*@ assert valid_string(title); */
1396 OLE_parse_PropertySet(&dataPt[pos], size, ext, title, file_time);
1397 }
1398 /*@ assert *ext == \null || valid_read_string(*ext); */
1399 /*@ assert valid_string(title); */
1400}
1401
1402/*@
1403 @ requires \valid_read(ministream + (0 .. ministream_size-1));

Callers 1

OLE_parse_summaryFunction · 0.85

Calls 3

dump_logFunction · 0.85
get32uFunction · 0.85
OLE_parse_PropertySetFunction · 0.85

Tested by

no test coverage detected