v1-0001-Fix-wrong-argument-to-SOFT_ERROR_OCCURRED-in-time.patch

application/octet-stream

Filename: v1-0001-Fix-wrong-argument-to-SOFT_ERROR_OCCURRED-in-time.patch
Type: application/octet-stream
Part: 0
Message: [PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date

Patch

Format: format-patch
Series: patch v1-0001
Subject: Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date
File+
src/backend/utils/adt/date.c 1 1
From f553acbaafa8c06eb2a37cadff1c838aad3cb70f Mon Sep 17 00:00:00 2001
From: Jianghua Yang <yjhjstz@gmail.com>
Date: Tue, 24 Mar 2026 08:35:32 -0700
Subject: [PATCH v1] Fix wrong argument to SOFT_ERROR_OCCURRED in
 timestamptz_date

In commit e2f289e5b9b, which made many cast functions error safe,
timestamptz_date() mistakenly passes fcinfo->args to the
SOFT_ERROR_OCCURRED() macro instead of fcinfo->context.

fcinfo->args is a NullableDatum[] array, not a Node pointer. The macro
casts its argument to Node* and checks the NodeTag field. When given
fcinfo->args, it reads the first argument's Datum value as a NodeTag,
which will almost certainly not match T_ErrorSaveContext, causing the
soft error check to always evaluate to false.

As a result, when the timestamptz-to-date conversion encounters an
overflow in error-safe mode, the function will return a garbage date
value instead of the expected NULL.

All three sibling functions modified in the same commit
(date_timestamp, timestamp_date, date_timestamptz) correctly use
fcinfo->context.

Author: Jianghua Yang <yjhjstz@gmail.com>
---
 src/backend/utils/adt/date.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 71ea048d251..c3327440380 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -1402,7 +1402,7 @@ timestamptz_date(PG_FUNCTION_ARGS)
 	DateADT		result;
 
 	result = timestamptz2date_safe(timestamp, fcinfo->context);
-	if (SOFT_ERROR_OCCURRED(fcinfo->args))
+	if (SOFT_ERROR_OCCURRED(fcinfo->context))
 		PG_RETURN_NULL();
 
 	PG_RETURN_DATEADT(result);
-- 
2.50.1 (Apple Git-155)