Jinoh Kang (@iamahuman) commented about dlls/ntdll/heap.c:
err = "invalid previous free block pointer"; else if (!(block_get_flags( prev ) & BLOCK_FLAG_FREE) || block_get_type( prev ) != BLOCK_TYPE_FREE) err = "invalid previous free block header";
- else if ((next = next_block( subheap, block )))
- else if ((next = next_block( subheap, block )) &&
/* LFH blocks do not use BLOCK_FLAG_PREV_FREE or back pointer */
!(block_get_flags( block ) & BLOCK_FLAG_LFH))
For accurate heap free checking, we should always assign `next = NULL` when validating LFH blocks.
```suggestion:-2+0 else { /* LFH blocks do not use BLOCK_FLAG_PREV_FREE or back pointer */ next = (block_get_flags( block ) & BLOCK_FLAG_LFH) ? NULL : next_block( subheap, block ); }
if (!err && next) ```