Thread: BUG #8230: Time interval size overflow

BUG #8230: Time interval size overflow

From
rok.kralj@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      8230
Logged by:          Rok Kralj
Email address:      rok.kralj@gmail.com
PostgreSQL version: 9.2.4
Operating system:   Arch Linux
Description:        =


As far as I know, the INTERVAL type is represented using three int32, one
for months, days and milliseconds.

However, overflow detections seems to work correctly only on these three
types; if they get overflown indirectly, they do not get detected:

SELECT INTERVAL '3000000000 days'
ERROR:  interval field value out of range: "3000000000 days"

SELECT INTERVAL '2000000000 years'
-147483648 years

I'm surprised this hasn't been reported yet. The expected behaviour is to
raise an error.

Re: BUG #8230: Time interval size overflow

From
Bruce Momjian
Date:
On Sun, Jun 16, 2013 at 11:03:53AM +0000, rok.kralj@gmail.com wrote:
> The following bug has been logged on the website:
>
> Bug reference:      8230
> Logged by:          Rok Kralj
> Email address:      rok.kralj@gmail.com
> PostgreSQL version: 9.2.4
> Operating system:   Arch Linux
> Description:
>
> As far as I know, the INTERVAL type is represented using three int32, one
> for months, days and milliseconds.
>
> However, overflow detections seems to work correctly only on these three
> types; if they get overflown indirectly, they do not get detected:
>
> SELECT INTERVAL '3000000000 days'
> ERROR:  interval field value out of range: "3000000000 days"
>
> SELECT INTERVAL '2000000000 years'
> -147483648 years
>
> I'm surprised this hasn't been reported yet. The expected behaviour is to
> raise an error.

The attached patch fixes the problem:

    test=> SELECT INTERVAL '2000000000 years';
    ERROR:  interval out of range
    LINE 1: SELECT INTERVAL '2000000000 years';

It also fixes this case

    test=> SELECT INTERVAL '2000000000-3 years';
    ERROR:  interval field value out of range: "2000000000-3 years"
    LINE 1: SELECT INTERVAL '2000000000-3 years';

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +

Attachment

Re: BUG #8230: Time interval size overflow

From
Rok Kralj
Date:
Hello Bruce,

thank you for your contribution. However, as seen from my later report, the
situation is much much worse (complex, if you want) than this bug. Please
see this:

http://www.postgresql.org/message-id/CAMWF=HS++N9-NKsh-o5QSymvp0Np-VB0GdWwAt4uie1h8ZdNTQ@mail.gmail.com

Rok Kralj,
PostgreSQL enthusiast


2014-01-25 Bruce Momjian <bruce@momjian.us>

> On Sun, Jun 16, 2013 at 11:03:53AM +0000, rok.kralj@gmail.com wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference:      8230
> > Logged by:          Rok Kralj
> > Email address:      rok.kralj@gmail.com
> > PostgreSQL version: 9.2.4
> > Operating system:   Arch Linux
> > Description:
> >
> > As far as I know, the INTERVAL type is represented using three int32, one
> > for months, days and milliseconds.
> >
> > However, overflow detections seems to work correctly only on these three
> > types; if they get overflown indirectly, they do not get detected:
> >
> > SELECT INTERVAL '3000000000 days'
> > ERROR:  interval field value out of range: "3000000000 days"
> >
> > SELECT INTERVAL '2000000000 years'
> > -147483648 years
> >
> > I'm surprised this hasn't been reported yet. The expected behaviour is to
> > raise an error.
>
> The attached patch fixes the problem:
>
>         test=> SELECT INTERVAL '2000000000 years';
>         ERROR:  interval out of range
>         LINE 1: SELECT INTERVAL '2000000000 years';
>
> It also fixes this case
>
>         test=> SELECT INTERVAL '2000000000-3 years';
>         ERROR:  interval field value out of range: "2000000000-3 years"
>         LINE 1: SELECT INTERVAL '2000000000-3 years';
>
> --
>   Bruce Momjian  <bruce@momjian.us>        http://momjian.us
>   EnterpriseDB                             http://enterprisedb.com
>
>   + Everyone has their own god. +
>



--
eMail: rok.kralj@gmail.com

Re: BUG #8230: Time interval size overflow

From
Bruce Momjian
Date:
On Sat, Jan 25, 2014 at 10:07:36PM +0100, Rok Kralj wrote:
> Hello Bruce,
>
> thank you for your contribution. However, as seen from my later report, the
> situation is much much worse (complex, if you want) than this bug. Please see
> this:
>
> http://www.postgresql.org/message-id/CAMWF=
> HS++N9-NKsh-o5QSymvp0Np-VB0GdWwAt4uie1h8ZdNTQ@mail.gmail.com

Yes, I see that in my mailbox and will address those shortly, but at
least this patch fixes part of the problem.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +