aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2024-06-04 07:15:10 +0900
committerMichael Paquier <michael@paquier.xyz>2024-06-04 07:15:10 +0900
commitf04d1c1db01199f02b0914a7ca2962c531935717 (patch)
tree21e8e8a7e1dd0e327e7f93f9ba14594422915aa4
parent4ebe51a5fbc3e08861db85fe3868c31c6bc8ed59 (diff)
downloadpostgresql-f04d1c1db01199f02b0914a7ca2962c531935717.tar.gz
postgresql-f04d1c1db01199f02b0914a7ca2962c531935717.zip
Improve assertion in mdwritev()
The assertion used at the beginning of mdwritev(), that is not enabled except by defining -DCHECK_WRITE_VS_EXTEND as mdnblocks() is costly, forgot about the total number of blocks to write at location specified by the caller. The calculation is fixed to count for that, and uses casts to uint64 to ensure a proper check should the number of blocks overflow. Using a cast is a suggestion from Tom Lane. Oversight in 4908c5872059. Author: Xing Guo Discussion: https://postgr.es/m/CACpMh+BM-VgKeO7suPG-VHTtpzJ+zsbDPwVHu42PLp-iTk0z+A@mail.gmail.com
-rw-r--r--src/backend/storage/smgr/md.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index bf0f3ca76d1..6796756358f 100644
--- a/src/backend/storage/smgr/md.c
+++ b/src/backend/storage/smgr/md.c
@@ -930,7 +930,7 @@ mdwritev(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
{
/* This assert is too expensive to have on normally ... */
#ifdef CHECK_WRITE_VS_EXTEND
- Assert(blocknum < mdnblocks(reln, forknum));
+ Assert((uint64) blocknum + (uint64) nblocks <= (uint64) mdnblocks(reln, forknum));
#endif
while (nblocks > 0)