fix-DecodeTimeOnly-v3.patch
text/x-patch
Filename: fix-DecodeTimeOnly-v3.patch
Type: text/x-patch
Part: 0
Patch
Format: unified
Series: patch v3
| File | + | − |
|---|---|---|
| src/backend/utils/adt/datetime.c | 6 | 0 |
| src/test/regress/expected/timetz.out | 10 | 0 |
| src/test/regress/sql/timetz.sql | 5 | 0 |
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 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.out
index 33ff8e18c9..a25f468cbb 100644
--- a/src/test/regress/expected/timetz.out
+++ b/src/test/regress/expected/timetz.out
@@ -19,6 +19,16 @@ 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');
+ ^
+-- this should fail too (the same with a dynamic timezone abbreviation)
+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2');
+ERROR: invalid input syntax for type time with time zone: "15:36:39 MSK m2"
+LINE 1: INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK 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.sql
index c41686a5e2..58c4b6e1bc 100644
--- a/src/test/regress/sql/timetz.sql
+++ b/src/test/regress/sql/timetz.sql
@@ -19,6 +19,11 @@ 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');
+-- this should fail too (the same with a dynamic timezone abbreviation)
+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2');
+
SELECT f1 AS "Time TZ" FROM TIMETZ_TBL;