@ @ 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)); @*/
| 1080 | @ assigns *(title + (0 .. 1023)); |
| 1081 | @*/ |
| 1082 | static 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; |
no test coverage detected