Re: beta6 pg_restore core dumps

Поиск
Список
Период
Сортировка
От Tatsuo Ishii
Тема Re: beta6 pg_restore core dumps
Дата
Msg-id 20010318101359U.t-ishii@sra.co.jp
обсуждение исходный текст
Ответ на Re: beta6 pg_restore core dumps  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Thanks, at least the problem I have reported seems gone after I
applied your patch.
--
Tatsuo Ishii

> After looking more closely I see that pg_restore has two different
> buffer overrun conditions in this one routine.  Attached is take two
> of my patch.
> 
> This would be a lot simpler and cleaner if _PrintData() simply didn't
> append a zero byte to the buffer contents.  Philip, is it actually
> necessary for it to do that?
> 
>             regards, tom lane
> 
> 
> *** pg_backup_custom.c.orig    Fri Feb  9 17:32:26 2001
> --- pg_backup_custom.c    Sat Mar 17 12:25:17 2001
> ***************
> *** 150,156 ****
>       if (ctx->zp == NULL)
>       die_horribly(AH, "%s: unable to allocate zlib stream archive context",progname);
>   
> !     ctx->zlibOut = (char*)malloc(zlibOutSize);
>       ctx->zlibIn = (char*)malloc(zlibInSize);
>       ctx->inSize = zlibInSize;
>       ctx->filePos = 0;
> --- 150,163 ----
>       if (ctx->zp == NULL)
>       die_horribly(AH, "%s: unable to allocate zlib stream archive context",progname);
>   
> !     /*
> !      * zlibOutSize is the buffer size we tell zlib it can output to.  We
> !      * actually allocate one extra byte because some routines want to append
> !      * a trailing zero byte to the zlib output.  The input buffer is expansible
> !      * and is always of size ctx->inSize; zlibInSize is just the initial
> !      * default size for it.
> !      */
> !     ctx->zlibOut = (char*)malloc(zlibOutSize+1);
>       ctx->zlibIn = (char*)malloc(zlibInSize);
>       ctx->inSize = zlibInSize;
>       ctx->filePos = 0;
> ***************
> *** 518,531 ****
>   
>       blkLen = ReadInt(AH);
>       while (blkLen != 0) {
> !         if (blkLen > (ctx->inSize - 1)) {
>               free(ctx->zlibIn);
>               ctx->zlibIn = NULL;
> !             ctx->zlibIn = (char*)malloc(blkLen);
>               if (!ctx->zlibIn)
>                   die_horribly(AH, "%s: failed to allocate decompression buffer\n", progname);
>   
> !             ctx->inSize = blkLen;
>               in = ctx->zlibIn;
>           }
>   
> --- 525,538 ----
>   
>       blkLen = ReadInt(AH);
>       while (blkLen != 0) {
> !         if (blkLen+1 > ctx->inSize) {
>               free(ctx->zlibIn);
>               ctx->zlibIn = NULL;
> !             ctx->zlibIn = (char*)malloc(blkLen+1);
>               if (!ctx->zlibIn)
>                   die_horribly(AH, "%s: failed to allocate decompression buffer\n", progname);
>   
> !             ctx->inSize = blkLen+1;
>               in = ctx->zlibIn;
>           }
>   


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: new version of contrib-intarray
Следующее
От: Philip Warner
Дата:
Сообщение: Re: beta6 pg_restore core dumps