| 250 | } |
| 251 | |
| 252 | static bool mi_verify_padding(const mi_page_t* page, const mi_block_t* block, size_t* size, size_t* wrong) { |
| 253 | size_t bsize; |
| 254 | size_t delta; |
| 255 | bool ok = mi_page_decode_padding(page, block, &delta, &bsize); |
| 256 | *size = *wrong = bsize; |
| 257 | if (!ok) return false; |
| 258 | mi_assert_internal(bsize >= delta); |
| 259 | *size = bsize - delta; |
| 260 | if (!mi_page_is_huge(page)) { |
| 261 | uint8_t* fill = (uint8_t*)block + bsize - delta; |
| 262 | const size_t maxpad = (delta > MI_MAX_ALIGN_SIZE ? MI_MAX_ALIGN_SIZE : delta); // check at most the first N padding bytes |
| 263 | mi_track_mem_defined(fill, maxpad); |
| 264 | for (size_t i = 0; i < maxpad; i++) { |
| 265 | if (fill[i] != MI_DEBUG_PADDING) { |
| 266 | *wrong = bsize - delta + i; |
| 267 | ok = false; |
| 268 | break; |
| 269 | } |
| 270 | } |
| 271 | mi_track_mem_noaccess(fill, maxpad); |
| 272 | } |
| 273 | return ok; |
| 274 | } |
| 275 | |
| 276 | static void mi_check_padding(const mi_page_t* page, const mi_block_t* block) { |
| 277 | size_t size; |
no test coverage detected