Re: Compressed TOAST Slicing

Поиск
Список
Период
Сортировка
От Andrey Borodin
Тема Re: Compressed TOAST Slicing
Дата
Msg-id AB33DB45-67B5-43C8-87A9-C4E3DF8EB447@yandex-team.ru
обсуждение исходный текст
Ответ на Re: Compressed TOAST Slicing  (Paul Ramsey <pramsey@cleverelephant.ca>)
Ответы Re: Compressed TOAST Slicing
Список pgsql-hackers

> 13 марта 2019 г., в 21:05, Paul Ramsey <pramsey@cleverelephant.ca> написал(а):
>
> Here is a new (final?) patch ...
>
> <compressed-datum-slicing-20190313a.patch>

This check

@@ -744,6 +748,8 @@ pglz_decompress(const char *source, int32 slen, char *dest,
                 {
                     *dp = dp[-off];
                     dp++;
+                    if (dp >= destend)    /* check for buffer overrun */
+                        break;        /* do not clobber memory */
                 }

is still done for every byte. You can precompute maximum allowed length before that cycle. Here's diff

diff --git a/src/common/pg_lzcompress.c b/src/common/pg_lzcompress.c
index 6b48892a8f..05b2b3d5d1 100644
--- a/src/common/pg_lzcompress.c
+++ b/src/common/pg_lzcompress.c
@@ -744,12 +744,11 @@ pglz_decompress_checked(const char *source, int32 slen, char *dest,
                                 * memcpy() here, because the copied areas could overlap
                                 * extremely!
                                 */
+                               len = Min(len, destend - dp);
                                while (len--)
                                {
                                        *dp = dp[-off];
                                        dp++;
-                                       if (dp >= destend)      /* check for buffer overrun */
-                                               break;          /* do not clobber memory */
                                }
                        }
                        else


Best regards, Andrey Borodin.

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: using index or check in ALTER TABLE SET NOT NULL
Следующее
От: Tom Lane
Дата:
Сообщение: Re: GIN indexes on an = ANY(array) clause