From: Alexander Lakhin <exclusion@gmail.com>
To: pgsql-bugs@lists.postgresql.org
Subject: Re: BUG #15910: Valgrind-detected error in DecodeTimeOnly
Date: Mon, 5 Aug 2019 08:55:55 +0300
Message-ID: <97ac4fe2-65d9-6a7b-76e0-5ad3b06cd9dc@gmail.com> (raw)
In-Reply-To: <0aaf1cb9-0f85-e786-fb32-b3d68b80d027@gmail.com>
References: <15910-2eba5106b9aa0c61@postgresql.org>
<0aaf1cb9-0f85-e786-fb32-b3d68b80d027@gmail.com>
Hello hackers,
16.07.2019 19:24, Alexander Lakhin wrote:
>> Bug reference: 15910
>> Logged by: Alexander Lakhin
>> Email address: exclusion@gmail.com
>> PostgreSQL version: 12beta2
>> Operating system: Ubuntu 18.04
>> Description:
>>
>> When executing the following query:
>> SELECT time with time zone '04:05:06 m2';
>> I get a strange result:
>> timetz
>> -------------------
>> 04:05:06+02:30:17
>>
> The attached patch fixes this issue.
In case this bug is worth fixing, please look at the improved patch with
the corresponding regression test.
Best regards,
Alexander
Attachments:fix-DecodeTimeOnly-v2.patch (text/x-patch, 2.3K) downloaddiff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.cindex 972fcd26a2..1f8b0183f3 100644--- a/src/backend/utils/adt/datetime.c+++ b/src/backend/utils/adt/datetime.c@@ -2280,6 +2280,9 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
GetCurrentDateTime(tmp);
else
{
+ /* a date has to be fully specified */+ if ((fmask & DTK_DATE_M) != DTK_DATE_M)+ return DTERR_BAD_FORMAT;
tmp->tm_year = tm->tm_year;
tmp->tm_mon = tm->tm_mon;
tmp->tm_mday = tm->tm_mday;
@@ -2307,6 +2310,9 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
GetCurrentDateTime(tmp);
else
{
+ /* a date has to be fully specified */+ if ((fmask & DTK_DATE_M) != DTK_DATE_M)+ return DTERR_BAD_FORMAT;
tmp->tm_year = tm->tm_year;
tmp->tm_mon = tm->tm_mon;
tmp->tm_mday = tm->tm_mday;
diff --git a/src/test/regress/expected/timetz.out b/src/test/regress/expected/timetz.outindex 33ff8e18c9..32609dfdc8 100644--- a/src/test/regress/expected/timetz.out+++ b/src/test/regress/expected/timetz.out@@ -19,6 +19,11 @@ INSERT INTO TIMETZ_TBL VALUES ('15:36:39 America/New_York');
ERROR: invalid input syntax for type time with time zone: "15:36:39 America/New_York"
LINE 1: INSERT INTO TIMETZ_TBL VALUES ('15:36:39 America/New_York');
^
+-- this should fail (the time specification is invalid)+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2');+ERROR: invalid input syntax for type time with time zone: "15:36:39 m2"+LINE 1: INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2');+ ^
SELECT f1 AS "Time TZ" FROM TIMETZ_TBL;
Time TZ
----------------
diff --git a/src/test/regress/sql/timetz.sql b/src/test/regress/sql/timetz.sqlindex c41686a5e2..a0a7cc4eb2 100644--- a/src/test/regress/sql/timetz.sql+++ b/src/test/regress/sql/timetz.sql@@ -19,6 +19,9 @@ INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
-- this should fail (the timezone offset is not known)
INSERT INTO TIMETZ_TBL VALUES ('15:36:39 America/New_York');
+-- this should fail (the time specification is invalid)+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2');+
SELECT f1 AS "Time TZ" FROM TIMETZ_TBL;
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-bugs@postgresql.org
Cc: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Subject: Re: BUG #15910: Valgrind-detected error in DecodeTimeOnly
In-Reply-To: <97ac4fe2-65d9-6a7b-76e0-5ad3b06cd9dc@gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox