mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Fix pg_trgm's picksplit function with all-true datums
The CACHESIGN.sign field is a BITVECP, not a TRGM, so you should not use GETSIGN() on it. You don't get a compiler warning because the GETSIGN() macro includes a cast. It resulted in a bogus read beyond end of buffer, which would cause bad split decisions or a crash if you're very unlucky. Reported-by: Mehmet D. INCE <mehmet@mehmetince.net> Backpatch-through: 14 Security: CVE-2026-14678
This commit is contained in:
committed by
Noah Misch
parent
75a03c569c
commit
1af08af694
@@ -900,7 +900,7 @@ gtrgm_picksplit(PG_FUNCTION_ARGS)
|
||||
else
|
||||
size_alpha = SIGLENBIT(siglen) -
|
||||
sizebitvec((cache[j].allistrue) ? GETSIGN(datum_l) :
|
||||
GETSIGN(cache[j].sign),
|
||||
cache[j].sign,
|
||||
siglen);
|
||||
}
|
||||
else
|
||||
@@ -913,7 +913,7 @@ gtrgm_picksplit(PG_FUNCTION_ARGS)
|
||||
else
|
||||
size_beta = SIGLENBIT(siglen) -
|
||||
sizebitvec((cache[j].allistrue) ? GETSIGN(datum_r) :
|
||||
GETSIGN(cache[j].sign),
|
||||
cache[j].sign,
|
||||
siglen);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user