[PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date - Mailing list pgsql-hackers

From Jianghua Yang
Subject [PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date
Date
Msg-id CAAZLFmSGti716gWeY=DCZ9TTVOixnHZ4_4V4tDzoeE86D64vOA@mail.gmail.com
Whole thread
Responses Re: [PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date
Re: [PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date
List 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

pgsql-hackers by date:

Previous
From: "Euler Taveira"
Date:
Subject: Re: pg_get__*_ddl consolidation
Next
From: Álvaro Herrera
Date:
Subject: Re: guc: make dereference style consistent in check_backtrace_functions