Re: generate_series for timestamptz and time zone problem
Andreas 'ads' Scherbaum <ads@pgug.de>
From: Andreas 'ads' Scherbaum <ads@pgug.de>
To: Gurjeet Singh <gurjeet@singh.im>, Tom Lane <tgl@sss.pgh.pa.us>
Cc: Przemysław Sztoch <przemyslaw@sztoch.pl>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2023-03-04T00:28:26Z
Lists: pgsql-hackers
On 31/01/2023 08:50, Gurjeet Singh wrote: > On Mon, Jan 30, 2023 at 4:07 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Gurjeet Singh <gurjeet@singh.im> writes: >>> [ generate_series_with_timezone.v6.patch ] >> The cfbot isn't terribly happy with this. It looks like UBSan >> is detecting some undefined behavior. Possibly an uninitialized >> variable? > It was the classical case of out-of-bounds access. I was trying to > access 4th argument, even in the case where the 3-argument variant of > generate_series() was called. > > Please see attached v7 of the patch. It now checks PG_NARGS() before > accessing the optional parameter. > > This mistake would've been caught early if there were assertions > preventing access beyond the number of arguments passed to the > function. I'll send the assert_enough_args.patch, that adds these > checks, in a separate thread to avoid potentially confusing cfbot. Tested this patch on current head. The patch applies, with a few offsets. Functionality wise it works as documented, also tried with "America/New_York" and "Europe/Berlin" as time zone. The included tests cover both an entire year (including a new year), and also a DST switch (date_add() for 2021-10-31 in Europe/Warsaw, which is the date the country switches to standard time). Minor nitpick: the texts use both "time zone" and "timezone". Regards, -- Andreas 'ads' Scherbaum German PostgreSQL User Group European PostgreSQL User Group - Board of Directors Volunteer Regional Contact, Germany - PostgreSQL Project
Commits
-
Add functions to do timestamptz arithmetic in a non-default timezone.
- 75bd846b68b0 16.0 landed
-
Refactor datetime functions' timezone lookup code to reduce duplication.
- 3e59e5048d0f 16.0 landed
-
Fix volatility marking of timestamptz_trunc_zone.
- 533e02e927c6 16.0 landed