Re: Ancient bug in formatting.c/to_char()

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: Ancient bug in formatting.c/to_char()
Дата
Msg-id 53870767.8090208@vmware.com
обсуждение исходный текст
Ответ на Ancient bug in formatting.c/to_char()  (Peter Geoghegan <pg@heroku.com>)
Ответы Re: Ancient bug in formatting.c/to_char()
Список pgsql-hackers
On 05/29/2014 04:59 AM, Peter Geoghegan wrote:
> Consider this example:
>
> [local]/postgres=# SELECT to_char(1e9::float8,'999999999999999999999D9');
>           to_char
> --------------------------
>               1000000000.0
> (1 row)
>
> [local]/postgres=# SELECT to_char(1e20::float8,'999999999999999999999D9');
>          to_char
> ------------------------
>    100000000000000000000
> (1 row)
>
> [local]/postgres=# SELECT to_char(1e20,'999999999999999999999D9');
>           to_char
> --------------------------
>    100000000000000000000.0
> (1 row)
>
>
> There is access to uninitialized memory here. #define
> DEBUG_TO_FROM_CHAR shows this to be the case (garbage is printed to
> stdout).
>
> Valgrind brought this to my attention. I propose the attached patch as
> a fix for this issue.
>
> The direct cause appears to be that float8_to_char() feels entitled to
> truncate Number description post-digits, while that doesn't happen
> within numeric_to_char(), say. This is very old code, from the
> original to_char() patch back in 2000, and the interactions here are
> not obvious. I think that that should be okay to not do this
> truncation, since the value of MAXDOUBLEWIDTH was greatly increased in
> 2007 as part of a round of fixes to bugs of similar vintage. There is
> still a defensive measure against over-sized input (we bail), but that
> ought to be unnecessary, strictly speaking.

postgres=# select to_char('0.1'::float8, '9D' || repeat('9', 1000));
ERROR:  double precision for character conversion is too wide

Yeah, the code is pretty crufty, I'm not sure what the proper fix would 
be. I wonder if psprintf would be useful.

- Heikki



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

Предыдущее
От: Ashesh Vashi
Дата:
Сообщение: Re: pg_stat directory and pg_stat_statements
Следующее
От: Simon Riggs
Дата:
Сообщение: Re: Compression of full-page-writes