From 0ef65d0f55e5cec81fe98aba7c907dfc1b93923f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 12 Feb 2023 12:50:55 -0500 Subject: Avoid dereferencing an undefined pointer in DecodeInterval(). Commit e39f99046 moved some code up closer to the start of DecodeInterval(), without noticing that it had been implicitly relying on previous checks to reject the case of empty input. Given empty input, we'd now dereference a pointer that hadn't been set, possibly leading to a core dump. (But if we fail to provoke a SIGSEGV, nothing bad happens, and the expected syntax error is thrown a bit later.) Per bug #17788 from Alexander Lakhin. Back-patch to v15 where the fault was introduced. Discussion: https://postgr.es/m/17788-dabac9f98f7eafd5@postgresql.org --- src/backend/utils/adt/datetime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/backend/utils/adt/datetime.c') diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index a3cfd54409b..cebc1172744 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -3365,7 +3365,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range, * to dump in postgres style, not SQL style.) *---------- */ - if (IntervalStyle == INTSTYLE_SQL_STANDARD && *field[0] == '-') + if (IntervalStyle == INTSTYLE_SQL_STANDARD && nf > 0 && *field[0] == '-') { force_negative = true; /* Check for additional explicit signs */ -- cgit v1.2.3