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

Function OLE_parse_title_entry

src/file_doc.c:1082–1136  ·  view source on GitHub ↗

@ @ requires 8 <= size <= 1024*1024; @ requires offset <= size; @ requires \valid_read(buffer+ (0 .. size-1)); @ requires \valid(title + (0 .. 1024-1)); @ requires valid_string(title); @ requires \initialized(buffer+ (0 .. size-1)); @ ensures valid_string(title); @ assigns *(title + (0 .. 1023)); @*/

Source from the content-addressed store, hash-verified

1080 @ assigns *(title + (0 .. 1023));
1081 @*/
1082static void OLE_parse_title_entry(const char *buffer, const unsigned int size, const unsigned int offset, char *title)
1083{
1084 if(offset + 8 > size)
1085 {
1086 return;
1087 }
1088 /*@ assert offset + 8 <= size; */
1089 {
1090 /*@ assert \valid_read(buffer + (0 .. size - 1)); */
1091 const unsigned int count=get32u(buffer, offset + 4);
1092 const unsigned int offset_tmp=offset + 8;
1093 const char *src=(const char *)buffer;
1094 if(count <= 1 || count > size)
1095 {
1096 return;
1097 }
1098 /*@ assert 1 < count <= size; */
1099 /*@ assert 1 < count <= 1024*1024; */
1100 if(offset_tmp + count > size)
1101 {
1102 return;
1103 }
1104 /*@ assert offset_tmp + count <= size; */
1105 /*@ assert \valid_read(src + (0 .. size - 1)); */
1106 /*@ assert offset_tmp + count <= size; */
1107 /*@ assert \valid_read(src + (0 .. offset_tmp + count - 1)); */
1108 /*@ assert \valid_read((src + offset_tmp) + (0 .. count - 1)); */
1109 /*@ assert \valid_read((src + offset_tmp) + (1 .. count - 1)); */
1110 /*@ assert \valid_read((char*)src + (0 .. offset_tmp + count - 1)); */
1111 /*@ assert \valid_read(((char*)(src+offset_tmp))+(0..count-1)); */
1112 /*@ assert \valid_read(((char*)(src+offset_tmp))+(1..count-1)); */
1113 /*@ assert \valid_read((char*)(src + offset_tmp)); */
1114 /*@ assert \valid_read((char*)(src + offset_tmp)) && \valid_read(((char*)(src+offset_tmp))+(1..count-1)); */
1115 /*@ assert valid_read_or_empty((void const *)(src + offset_tmp), count); */
1116 /*@ assert valid_read_or_empty((void const *)(src + offset_tmp), count); */
1117#ifndef DISABLED_FOR_FRAMAC
1118 if(count < 1024)
1119 {
1120 memcpy(title, &src[offset_tmp], count);
1121 title[count]='\0';
1122 /*@ assert valid_string(title); */
1123 }
1124 else
1125 {
1126 memcpy(title, &src[offset_tmp], 1023);
1127 title[1023]='\0';
1128 /*@ assert valid_string(title); */
1129 }
1130#endif
1131#ifdef DEBUG_OLE
1132 log_info("Title %s\n", title);
1133#endif
1134 }
1135 /*@ assert valid_string(title); */
1136}
1137
1138/*@
1139 @ requires 8 <= size <= 1024*1024;

Callers 1

Calls 1

get32uFunction · 0.85

Tested by

no test coverage detected