Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64

From: Dave Page <dpage(at)postgresql(dot)org>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Dave Page <dpage(at)postgresql(dot)org>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>, pgsql-committers <pgsql-committers(at)postgresql(dot)org>
Subject: Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64
Date: 2011-05-01 09:15:51
Message-ID: BANLkTinyNpGi5wUh=HnHE-FFo3yrRQ1cRQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Looks like you committed this before I got to it - moa is green, so I
guess it works.

Thanks.

On Thursday, April 28, 2011, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Please see if the attached version works.
>
>                        regards, tom lane
>
>
> Datum
> pg_size_pretty(PG_FUNCTION_ARGS)
> {
>        int64           size = PG_GETARG_INT64(0);
>        char            buf[64];
>        int64           limit = 10 * 1024;
>        int64           limit2 = limit * 2 - 1;
>
>        if (size < limit)
>                snprintf(buf, sizeof(buf), INT64_FORMAT " bytes", size);
>        else
>        {
>                size >>= 9;                             /* keep one extra bit for rounding */
>                if (size < limit2)
>                        snprintf(buf, sizeof(buf), INT64_FORMAT " kB",
>                                         (size + 1) / 2);
>                else
>                {
>                        size >>= 10;
>                        if (size < limit2)
>                                snprintf(buf, sizeof(buf), INT64_FORMAT " MB",
>                                                 (size + 1) / 2);
>                        else
>                        {
>                                size >>= 10;
>                                if (size < limit2)
>                                        snprintf(buf, sizeof(buf), INT64_FORMAT " GB",
>                                                         (size + 1) / 2);
>                                else
>                                {
>                                        size >>= 10;
>                                        snprintf(buf, sizeof(buf), INT64_FORMAT " TB",
>                                                         (size + 1) / 2);
>                                }
>                        }
>                }
>        }
>
>        PG_RETURN_TEXT_P(cstring_to_text(buf));
> }
>

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2011-05-01 21:58:17 pgsql: Make CLUSTER lock the old table's toast table before copying dat
Previous Message Tom Lane 2011-04-30 17:39:37 Re: Re: [COMMITTERS] pgsql: Update docs to say you need fsync to make sync rep work fast.

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2011-05-01 09:36:12 strange view performance
Previous Message Pavel Stehule 2011-05-01 04:14:49 Re: increasing collapse_limits?