| From: | Jianghua Yang <yjhjstz(at)gmail(dot)com> |
|---|---|
| To: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Subject: | [PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date |
| Date: | 2026-03-24 15:44:29 |
| Message-ID: | CAAZLFmSGti716gWeY=DCZ9TTVOixnHZ4_4V4tDzoeE86D64vOA@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi hackers,
I found a small bug in commit e2f289e5b9b ("Make many cast functions
error safe").
In timestamptz_date(), the SOFT_ERROR_OCCURRED() check mistakenly
uses fcinfo->args instead of fcinfo->context:
result = timestamptz2date_safe(timestamp, fcinfo->context);
if (SOFT_ERROR_OCCURRED(fcinfo->args)) /* should be fcinfo->context */
PG_RETURN_NULL();
fcinfo->args is a NullableDatum[] array, not a Node *. The
SOFT_ERROR_OCCURRED macro casts its argument to Node * and reads
the NodeTag field. When given fcinfo->args, it interprets the first
argument's Datum value (a TimestampTz) as a NodeTag, which will
almost never match T_ErrorSaveContext. This causes 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 returns a wrong 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.
This appears to be a copy-paste oversight.
The fix is a one-line change: fcinfo->args → fcinfo->context.
| Attachment | Content-Type | Size |
|---|---|---|
| v1-0001-Fix-wrong-argument-to-SOFT_ERROR_OCCURRED-in-time.patch | application/octet-stream | 1.6 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Álvaro Herrera | 2026-03-24 15:55:18 | Re: guc: make dereference style consistent in check_backtrace_functions |
| Previous Message | Euler Taveira | 2026-03-24 15:43:00 | Re: pg_get__*_ddl consolidation |