pgsql: Fix two issues in TOAST decompression.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix two issues in TOAST decompression.
Дата
Msg-id E1kZMw1-0005Lb-Nm@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix two issues in TOAST decompression.

pglz_maximum_compressed_size() potentially underestimated the amount
of compressed data required to produce N bytes of decompressed data;
this is a fault in commit 11a078cf8.

Separately from that, pglz_decompress() failed to protect itself
against corrupt compressed data, particularly off == 0 in a match
tag.  Commit c60e520f6 turned such a situation into an infinite loop,
where before it'd just have resulted in garbage output.

The combination of these two bugs seems like it may explain bug #16694
from Tom Vijlbrief, though it's impossible to be quite sure without
direct inspection of the failing session.  (One needs to assume that
the pglz_maximum_compressed_size() bug caused us to fail to fetch the
second byte of a match tag, and what happened to be there instead was
a zero.  The reported infinite loop is hard to explain without off == 0,
though.)

Aside from fixing the bugs, rewrite associated comments for more
clarity.

Back-patch to v13 where both these commits landed.

Discussion: https://postgr.es/m/16694-f107871e499ec114@postgresql.org

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/2330f4d3a87ac43b6ecd31bfd698384888ed03cb

Modified Files
--------------
src/common/pg_lzcompress.c | 101 +++++++++++++++++++++++++++++----------------
1 file changed, 66 insertions(+), 35 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Avoid null pointer dereference if error result lacks SQLSTATE.
Следующее
От: David Rowley
Дата:
Сообщение: pgsql: Allow run-time pruning on nested Append/MergeAppend nodes