mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-11 19:20:40 +08:00
Properly determine length for on-disk TOAST values
In detoast_attr_slice, VARSIZE_ANY was used to compute compressed length
of on-disk TOAST values. That's incorrect, because the varlena value may
be just a TOAST pointer, producing either bogus value or crashing.
This is likely why the code was crashing on big-endian machines before
540f316809
replaced the VARSIZE with VARSIZE_ANY, which however only
masked the issue.
Reported-by: Rushabh Lathia
Discussion: https://postgr.es/m/CAL-OGkthU9Gs7TZchf5OWaL-Gsi=hXqufTxKv9qpNG73d5na_g@mail.gmail.com
This commit is contained in:
parent
d482f7f867
commit
2dc08bd617
@ -233,7 +233,7 @@ detoast_attr_slice(struct varlena *attr,
|
||||
* of a given length (after decompression).
|
||||
*/
|
||||
max_size = pglz_maximum_compressed_size(sliceoffset + slicelength,
|
||||
TOAST_COMPRESS_SIZE(attr));
|
||||
toast_pointer.va_extsize);
|
||||
|
||||
/*
|
||||
* Fetch enough compressed slices (compressed marker will get set
|
||||
|
Loading…
Reference in New Issue
Block a user