summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2025-10-30 14:48:10 +1300
committerDavid Rowley <drowley@postgresql.org>2025-10-30 14:48:10 +1300
commit50eb4e11815664bfcee883e92f4bf238ac23ec12 (patch)
treeedc2157fdc4c7cdf8783b021da463c139473dc08 /src
parent3853a6956c3e3bc7a6fa9bcdb205a2997f46bac2 (diff)
Fix bogus use of "long" in AllocSetCheck()
Because long is 32-bit on 64-bit Windows, it isn't a good datatype to store the difference between 2 pointers. The under-sized type could overflow and lead to scary warnings in MEMORY_CONTEXT_CHECKING builds, such as: WARNING: problem in alloc set ExecutorState: bad single-chunk %p in block %p However, the problem lies only in the code running the check, not from an actual memory accounting bug. Fix by using "Size" instead of "long". This means using an unsigned type rather than the previous signed type. If the block's freeptr was corrupted, we'd still catch that if the unsigned type wrapped. Unsigned allows us to avoid further needless complexities around comparing signed and unsigned types. Author: David Rowley <dgrowleyml@gmail.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Backpatch-through: 13 Discussion: https://postgr.es/m/CAApHDvo-RmiT4s33J=aC9C_-wPZjOXQ232V-EZFgKftSsNRi4w@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/mmgr/aset.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c
index d5ae1bdd3cd..bcd09c07533 100644
--- a/src/backend/utils/mmgr/aset.c
+++ b/src/backend/utils/mmgr/aset.c
@@ -1668,9 +1668,9 @@ AllocSetCheck(MemoryContext context)
prevblock = block, block = block->next)
{
char *bpoz = ((char *) block) + ALLOC_BLOCKHDRSZ;
- long blk_used = block->freeptr - bpoz;
- long blk_data = 0;
- long nchunks = 0;
+ Size blk_used = block->freeptr - bpoz;
+ Size blk_data = 0;
+ Size nchunks = 0;
bool has_external_chunk = false;
if (IsKeeperBlock(set, block))