Issue in to_timestamp/to_date while handling the quoted literal string - Mailing list pgsql-hackers

From Suraj Kharage
Subject Issue in to_timestamp/to_date while handling the quoted literal string
Date
Msg-id CAF1DzPW_zT7BNqKxS87GF_RWRude2sJ8tJzOJ2HCOqtSaVuQCA@mail.gmail.com
Whole thread Raw
Responses Re: Issue in to_timestamp/to_date while handling the quoted literal string  (Brendan Jurd <direvus@gmail.com>)
List pgsql-hackers
Hi,

I noticed the issue in to_timestamp()/to_date() while handling the double quote literal string. If any double quote literal characters found in format, we generate the NODE_TYPE_CHAR in parse format and store that actual character in FormatNode->character. n DCH_from_char, we just increment the input string by length of character for NODE_TYPE_CHAR.
We are actually not matching these characters in input string and because of this, date values get changed if quoted literal string is not identical in input and format string.

e.g:

postgres@78619=#select to_timestamp('2019-05-24T23:12:45', 'yyyy-mm-dd"TT"hh24:mi:ss');
       to_timestamp        
---------------------------
 2019-05-24 03:12:45+05:30
(1 row)


In above example, the quoted string is 'TT', so it just increment the input string by 2 while handling these characters and returned the wrong hour value.

My suggestion is to match the exact characters from quoted literal string in input string and if doesn't match then throw an error.

Attached is the POC patch which almost works for all scenarios except for whitespace - as a quote character.

Suggestions?
--
--

Thanks & Regards, 
Suraj kharage, 
EnterpriseDB Corporation, 
The Postgres Database Company.
Attachment

pgsql-hackers by date:

Previous
From: "Imai, Yoshikazu"
Date:
Subject: RE: seems like a bug in pgbench -R
Next
From: Jesper Pedersen
Date:
Subject: Re: pg_receivewal documentation