summaryrefslogtreecommitdiff
path: root/pkmem.h
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-06-25 17:49:56 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-06-25 17:49:56 -0400
commit2ce82eea5c7d5e05a3e3d220c19bbdac830e7dba (patch)
treed9b448134b8f63743e0c70eb74c71ac899a59caa /pkmem.h
parent7c7b8dd41be35ec1c540356e039ef3692fc07732 (diff)
pkmem: handle overflows & leaks in tests
Diffstat (limited to 'pkmem.h')
-rw-r--r--pkmem.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/pkmem.h b/pkmem.h
index 2339d22..461fc64 100644
--- a/pkmem.h
+++ b/pkmem.h
@@ -507,10 +507,11 @@ pk_delete_bkt(const void* ptr, size_t sz, struct pk_membucket* bkt)
{
#ifdef PK_MEMORY_FORCE_MALLOC
#if defined(__cplusplus)
- return std::free(const_cast<void*>(ptr));
+ std::free(const_cast<void*>(ptr));
#else
- return free((void*)ptr);
+ free((void*)ptr);
#endif
+ return;
#endif
size_t i, k;
mtx_lock(&bkt->mtx);
@@ -567,17 +568,16 @@ pk_delete_bkt(const void* ptr, size_t sz, struct pk_membucket* bkt)
struct pk_memblock* beforeBlk = NULL;
struct pk_memblock* afterBlk = NULL;
for (i = bkt->block_head_r+1; i > 0 ; --i) {
- k = pk_memblock_blocks_idx(bkt, i-2);
+ k = pk_memblock_blocks_idx(bkt, (i-1));
tmp_blk = &bkt->blocks[k];
if (tmp_blk->data + tmp_blk->size == ptr) {
beforeBlk = tmp_blk;
+ break;
}
- tmp_blk -= 1;
if (i <= bkt->block_head_r+1 && tmp_blk->data == afterPtr) {
afterBlk = tmp_blk;
- break;
+ continue;
}
- tmp_blk += 1;
if (tmp_blk->data < (char*)ptr) {
break;
}