From: Tom Lane Date: Tue, 14 Dec 2021 16:46:36 +0000 (-0500) Subject: Fix datatype confusion in logtape.c's right_offset(). X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=2de3c1015cb2556af501c630b1768a20f111fe95;p=users%2Fc2main%2Fpostgres.git Fix datatype confusion in logtape.c's right_offset(). This could only matter if (a) long is wider than int, and (b) the heap of free blocks exceeds UINT_MAX entries, which seems pretty unlikely. Still, it's a theoretical bug, so backpatch to v13 where the typo came in (in commit c02fdc922). In passing, also make swap_nodes() use consistent datatypes. Ma Liangzhu Discussion: https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org --- diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c index 48baccd6a2..722708237b 100644 --- a/src/backend/utils/sort/logtape.c +++ b/src/backend/utils/sort/logtape.c @@ -343,7 +343,7 @@ ltsReadFillBuffer(LogicalTape *lt) static inline void swap_nodes(long *heap, unsigned long a, unsigned long b) { - unsigned long swap; + long swap; swap = heap[a]; heap[a] = heap[b]; @@ -357,7 +357,7 @@ left_offset(unsigned long i) } static inline unsigned long -right_offset(unsigned i) +right_offset(unsigned long i) { return 2 * i + 2; }