From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: p.nekrasov@fobos-nt.ru
Subject: BUG #18614: [ECPG] out of bound in DecodeDateTime
Date: Thu, 12 Sep 2024 08:54:42 +0000
Message-ID: <18614-6bbe00117352309e@postgresql.org> (raw)
The following bug has been logged on the website:
Bug reference: 18614
Logged by: Pavel Nekrasov
Email address: p.nekrasov@fobos-nt.ru
PostgreSQL version: 17rc1
Operating system: Alt 10
Description:
in the line ```if (tm->tm_mday < 1 || tm->tm_mday >
day_tab[isleap(tm->tm_year)][tm->tm_mon - 1]) ``` tm->tm_mon may be equal to
0, which will result in reading by indexes -1
this is possible when calling PGTYPESdate_from_asc or
PGTYPEStimestamp_from_asc with "str" equal, for example, "AM95000062"
Patch:
inline patch 1: src/interfaces/ecpg/pgtypeslib/dt_common.c (+1/-2 lines) download inline-1.patch--- a/src/interfaces/ecpg/pgtypeslib/dt_common.c+++ b/src/interfaces/ecpg/pgtypeslib/dt_common.c@@ -2327,10 +2327,9 @@ DecodeDateTime(char **field, int *ftype, int nf,
return ((fmask & DTK_TIME_M) == DTK_TIME_M) ? 1 : -1;
/*
- * check for valid day of month, now that we know for sure the month- * and year...+ * check for valid day of month and month, now that we know for sure theyear...
*/
- if (tm->tm_mday < 1 || tm->tm_mday >
day_tab[isleap(tm->tm_year)][tm->tm_mon - 1])
+ if (tm->tm_mon < 1 || tm->tm_mday < 1 || tm->tm_mday >
day_tab[isleap(tm->tm_year)][tm->tm_mon - 1])
return -1;
/*
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: noreply@postgresql.org, pgsql-bugs@lists.postgresql.org, p.nekrasov@fobos-nt.ru
Subject: Re: BUG #18614: [ECPG] out of bound in DecodeDateTime
In-Reply-To: <18614-6bbe00117352309e@postgresql.org>
* 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