Re: [COMMITTERS] pgsql: Clean up jsonb code.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [COMMITTERS] pgsql: Clean up jsonb code.
Дата
Msg-id 6516.1399672446@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [COMMITTERS] pgsql: Clean up jsonb code.  (Alexander Korotkov <aekorotkov@gmail.com>)
Ответы Re: [COMMITTERS] pgsql: Clean up jsonb code.
Список pgsql-hackers
Alexander Korotkov <aekorotkov@gmail.com> writes:
> With current head I can't load delicious dataset into jsonb format. I got
> segfault. It looks like memory corruption.

The proximate cause of this seems to be that reserveFromBuffer() fails
to consider the possibility that it needs to more-than-double the
current buffer size.  This change makes the crash go away for me:

diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c
index 832a08d..0c4af04 100644
*** a/src/backend/utils/adt/jsonb_util.c
--- b/src/backend/utils/adt/jsonb_util.c
*************** reserveFromBuffer(convertState *buffer, 
*** 1186,1192 ****     /* Make more room if needed */     if (buffer->len + len > buffer->allocatedsz)     {
!         buffer->allocatedsz *= 2;         buffer->buffer = repalloc(buffer->buffer, buffer->allocatedsz);     } 
--- 1186,1195 ----     /* Make more room if needed */     if (buffer->len + len > buffer->allocatedsz)     {
!         do
!         {
!             buffer->allocatedsz *= 2;
!         } while (buffer->len + len > buffer->allocatedsz);         buffer->buffer = repalloc(buffer->buffer,
buffer->allocatedsz);    } 
 

However, what it looks to me like we've got here is a very bad
reimplementation of StringInfo buffers.  There is for example no
integer-overflow checking here.  Rather than try to bring this code
up to speed, I think we should rip it out and use StringInfo.
        regards, tom lane



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: test_shm_mq failing on anole (was: Sending out a request for more buildfarm animals?)
Следующее
От: Peter Geoghegan
Дата:
Сообщение: Re: [COMMITTERS] pgsql: Clean up jsonb code.