(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib-index/mail-cache-fields.c) |
| |
| 171 | | | static int (struct mail_cache *cache, |
| 172 | | | uint32_t *offset_r, bool map) |
| 173 | | | { |
| 174 | | | const struct *field_hdr; |
| 175 | | | struct tmp_field_hdr; |
| 176 | | | uint32_t offset = 0, next_offset; |
| 177 | | | unsigned int next_count = 0; |
| 178 | | | bool invalidate = FALSE; |
| 179 | | | int ret; |
| 180 | | | |
| 181 | | | if (MAIL_CACHE_IS_UNUSABLE(cache)) { |
| 182 | | | *offset_r = 0; |
| 183 | | | return 0; |
| 184 | | | } |
| 185 | | | |
| 186 | | | |
| 187 | | | offset = 0; |
Useless Assignment
This code assigns the variable the same value it already had. |
|
| 188 | | | next_offset = cache-> != 0 ? |
| 189 | | | cache-> : |
| 190 | | | mail_index_offset_to_uint32(cache->hdr->); |
| 191 | | | while (next_offset != 0) { |
| 192 | | | if (next_offset == offset) { |
| 193 | | | mail_cache_set_corrupted(cache, |
| 194 | | | "next_offset in field loops"); |
| 195 | | | return -1; |
| 196 | | | } |
| 197 | | | offset = next_offset; |
| 198 | | | invalidate = TRUE; |
| 199 | | | |
| 200 | | | if (cache->mmap_base != NULL) { |
| 201 | | | if (mail_cache_map(cache, offset, |
| 202 | | | sizeof(*field_hdr)) < 0) |
| 203 | | | return -1; |
| 204 | | | if (offset >= cache->mmap_length) { |
| 205 | | | mail_cache_set_corrupted(cache, |
| 206 | | | " field next_offset points outside file"); |
| 207 | | | return -1; |
| 208 | | | } |
| 209 | | | |
| 210 | | | field_hdr = CONST_PTR_OFFSET(cache->data, offset);
x /home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/macros.h |
| |
29 | #define CONST_PTR_OFFSET(ptr, offset) \ |
30 | ((const void *) (((const unsigned char *) (ptr)) + (offset))) |
| |
|
| 211 | | | } else { |
| 212 | | | |
| 213 | | | |
| 214 | | | |
| 215 | | | ret = pread_full(cache->fd, &tmp_field_hdr, |
| 216 | | | sizeof(tmp_field_hdr), offset); |
| 217 | | | if (ret < 0) { |
| 218 | | | mail_cache_set_syscall_error(cache, "pread()"); |
| 219 | | | return -1; |
| 220 | | | } |
| 221 | | | if (ret == 0) { |
| 222 | | | mail_cache_set_corrupted(cache, |
| 223 | | | " field next_offset points outside file"); |
| 224 | | | return -1; |
| 225 | | | } |
| 226 | | | field_hdr = &tmp_field_hdr; |
| 227 | | | } |
| 228 | | | |
| 229 | | | next_offset = |
| 230 | | | mail_index_offset_to_uint32(field_hdr->next_offset); |
| 231 | | | next_count++; |
| 232 | | | } |
| 233 | | | |
| 234 | | | if (offset == 0) { |
| 235 | | | mail_cache_set_corrupted(cache, "missing fields"); |
| 236 | | | return -1; |
| 237 | | | } |
| 238 | | | cache-> = offset; |
| 239 | | | |
| 240 | | | if (next_count > ) |
| 241 | | | cache->need_compress_file_seq = cache->hdr->file_seq; |
| 242 | | | |
| 243 | | | if (map) { |
| 244 | | | if (cache->file_cache != NULL && invalidate) { |
| 245 | | | |
| 246 | | | |
| 247 | | | |
| 248 | | | file_cache_invalidate(cache->file_cache, offset, |
| 249 | | | field_hdr->size); |
| 250 | | | } |
| 251 | | | if (mail_cache_map(cache, offset, field_hdr->size) < 0) |
| 252 | | | return -1; |
| 253 | | | } |
| 254 | | | |
| 255 | | | *offset_r = offset; |
| 256 | | | return 0; |
| 257 | | | } |
| |