Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w53wP-002r7R-32 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 15:45:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w53wO-007clh-1Z for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 15:45:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w53wO-007clY-0I for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 15:45:12 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w53wM-00000000oRQ-3NHQ for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 15:45:11 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-b980b35534eso871797466b.1 for ; Tue, 24 Mar 2026 08:45:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774367109; cv=none; d=google.com; s=arc-20240605; b=FfBAJ2sOTBJRxKHUMfVkFla5l3+v0HWT2w6ybYkVsk87Q1bZWL48zw0uqzxYt6ZN1q H97wnSmulPO6ZHWuZAahIUVTNljC7awQFN2Hou1vzkAfikjpSYdiOCNYAkmYwC65WnFt K8Mii/WUcNF2A9Xv14ykwuxTGJbuS+LTCAFgPTBTQ9Dmuc+bE7nAakvvEZNC8Fb77G26 4dlSQfArYvCU/agQUqC9TZYJK6wOl8rGICUye9DrTExHNgUQaBzcOnPDpfmRKXL/7y5I 7ec5Xdn4CMXQV3QBZwF2s9e145tnmfFJCPHzQC18Orb6uuR/RXh4baZovmvvUBZ4a0fQ 43kQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=aBKaUi/okU7cfFyJxQwBXkXk7nmgXKcbmGSMmLlUyKI=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=DbcE9H3B2JHqOdjWUsQw/pZ/yKLGWBw+EoZbgJRS+N40fS5zu3MpOiGfUfivGIhq07 Fapu7dD1o1GSqUlBuUc+MWvUrasJe0FSVUaSQPnXSr2O9ObKy9Gjk0AQ6+su+Dfci8gH kyMQMNy9EpiBkdkFdW9/YfkSvaQgi1xuoJ9paHkfSbNiky/bTUn9yy+dD4CZNw7rDU6M MXgHN+MKcCYy073V4lLMWVtKToK4dZT+w1C2Zh0sQl1VTHDzSZ5EEsxM8vzjpMbgN8RR HLXst/0cmPH4xynG/ynOozUtcg7qGwmaPhmZ5C8BUowaWM/XpXhRNUPMKGiI30gSAENL YYYQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774367109; x=1774971909; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=aBKaUi/okU7cfFyJxQwBXkXk7nmgXKcbmGSMmLlUyKI=; b=A6ra/UkHXw5/hRz5XAxSdGm3/OvRiaXtx00DG5Nl5iX1FhurUjw8VSZdouc+zjBLtO Obhit1mcYzdP/YVU0R0Zal7DHNf9IoIgiGycUu2ZjQleYL4NHLdioiPCR3fqtYofAVE0 uPJa5WycFr5o2dJGLun+LdEhLLyJhCe/X+tOD+qKHK8pEvpC+OUc/rypy7KOLni4lMQK 9CuQ0Jl4XT7BdfNAMTvqiJq86i181fVaKc25GEzkYXEuVLJAqmzRSbaV3oX+JfE3y5HA pyG8f4tL8tnUPkk52JE9g92LrhO46EssJIGT5o4Tl1chIODtzIppGdVyBiDAcvWaCxur 0s8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774367109; x=1774971909; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=aBKaUi/okU7cfFyJxQwBXkXk7nmgXKcbmGSMmLlUyKI=; b=SqiMkIrWjvx3urOq6iALMyluVp9ZnIv29LxvQxXN5PaeMGtal/p/VaShpU4jNE+zYS xq/volkkrXve0k1BOy4SKqp+/oRSivpMGGYF+PyfpQeukcBUESMJznysvAXI6PCLdPhF y3Y/6o66E+eFgv+64PhmvFc+8LlICzwA82DBLiIK4pigOOZCmZWa2OG+OZTMcyVZwf6x a464xtzVVzjHtD+C95M9DnIp1014J4lhY8NUsQriWS1tw6ZHOfi4NVZ4D3hRXdLikXxf 4DkRInWial6NZH4UILzwvkiR5P1a3db/g4lESj8nnnkUdNuDLrJDLocgasQIeYtpSeiO HmRQ== X-Gm-Message-State: AOJu0YwAtIKOR5DpHdYEdn+Zc5H1S47wkjJ1ez0TEJ7/4QtxqEhTFQmw ncgdBOiqnBsBY87w9v6jpLVxgN0HTrvGRlpHqv3FA0kkmaqjaes+S57DeWU8CmvcfovO1XVNTrv Ab1VhQgf7c1MLNKkLSe3jm7U0kY44WFc+hWMPxdQ= X-Gm-Gg: ATEYQzygPN9PoPoYgfUd70VFhN25CNKxwjALcqO4rfaOy7x7QtefOAfKkBLO/r0WN/p xxbSsT9el5jjaGxFtLn1KzL9kk0v6oWaGr0rmb+COS98pzKuwy5YHUOxbvwBUQtqfwGZrz/pJLR mDNggxw3wbkgXJnOHnzlHALyeldZkkJguBPMvVvE91y7zbQbgXicNO930cK7tCpw5VtBCEVo9Zv IwieGfSNzsbGWQPt0kuYwVTg8OWROxsHMc0xzh8/3caS168Fv0+zYD/s9GZmhcGBPGnnHj+u/q0 Wp8dz3h05OwPrqNjbdFWNpWXi08CIpRsJKJRmvNrgG71PR3XajofUr1zFeOfzQUwWV4iTi4= X-Received: by 2002:a17:907:7b87:b0:b88:5b72:ec39 with SMTP id a640c23a62f3a-b988630badcmr239656166b.5.1774367108802; Tue, 24 Mar 2026 08:45:08 -0700 (PDT) MIME-Version: 1.0 From: Jianghua Yang Date: Tue, 24 Mar 2026 08:44:29 -0700 X-Gm-Features: AQROBzC8ZiGaoVHzlNoqykVfdGA0VkrBzCLZHifeMf9Y4Thnz4mDn5D9CvygNwk Message-ID: Subject: [PATCH] Fix wrong argument to SOFT_ERROR_OCCURRED in timestamptz_date To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000038e510064dc709fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000038e510064dc709fb Content-Type: multipart/alternative; boundary="00000000000038e50f064dc709f9" --00000000000038e50f064dc709f9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 =3D 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 =E2=86=92 fcinfo->context. --00000000000038e50f064dc709f9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=C2=A0Hi hackers,

=C2=A0 I found a small bug in com= mit e2f289e5b9b ("Make many cast functions error safe").

= =C2=A0 In timestamptz_date(), the SOFT_ERROR_OCCURRED() check mistakenly=C2=A0 uses fcinfo->args instead of fcinfo->context:

=C2=A0 r= esult =3D timestamptz2date_safe(timestamp, fcinfo->context);
=C2=A0 i= f (SOFT_ERROR_OCCURRED(fcinfo->args)) =C2=A0 /* should be fcinfo->con= text */
=C2=A0 =C2=A0 =C2=A0 PG_RETURN_NULL();

=C2=A0 fcinfo->= args is a NullableDatum[] array, not a Node *. The
=C2=A0 SOFT_ERROR_OCC= URRED macro casts its argument to Node * and reads
=C2=A0 the NodeTag fi= eld. When given fcinfo->args, it interprets the first
=C2=A0 argument= 's Datum value (a TimestampTz) as a NodeTag, which will
=C2=A0 almos= t never match T_ErrorSaveContext. This causes the soft error
=C2=A0 chec= k to always evaluate to false.

=C2=A0 As a result, when the timestam= ptz-to-date conversion encounters an
=C2=A0 overflow in error-safe mode,= the function returns a wrong date value
=C2=A0 instead of the expected = NULL.

=C2=A0 All three sibling functions modified in the same commit= (date_timestamp,
=C2=A0 timestamp_date, date_timestamptz) correctly use= fcinfo->context.
=C2=A0 This appears to be a copy-paste oversight.
=C2=A0 The fix is a one-line change: fcinfo->args =E2=86=92 fcinfo= ->context.

--00000000000038e50f064dc709f9-- --00000000000038e510064dc709fb Content-Type: application/octet-stream; name="v1-0001-Fix-wrong-argument-to-SOFT_ERROR_OCCURRED-in-time.patch" Content-Disposition: attachment; filename="v1-0001-Fix-wrong-argument-to-SOFT_ERROR_OCCURRED-in-time.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn4sb22k0 RnJvbSBmNTUzYWNiYWFmYThjMDZlYjJhMzdjYWRmZjFjODM4YWFkM2NiNzBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaWFuZ2h1YSBZYW5nIDx5amhqc3R6QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAyNCBNYXIgMjAyNiAwODozNTozMiAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEZp eCB3cm9uZyBhcmd1bWVudCB0byBTT0ZUX0VSUk9SX09DQ1VSUkVEIGluCiB0aW1lc3RhbXB0el9k YXRlCgpJbiBjb21taXQgZTJmMjg5ZTViOWIsIHdoaWNoIG1hZGUgbWFueSBjYXN0IGZ1bmN0aW9u cyBlcnJvciBzYWZlLAp0aW1lc3RhbXB0el9kYXRlKCkgbWlzdGFrZW5seSBwYXNzZXMgZmNpbmZv LT5hcmdzIHRvIHRoZQpTT0ZUX0VSUk9SX09DQ1VSUkVEKCkgbWFjcm8gaW5zdGVhZCBvZiBmY2lu Zm8tPmNvbnRleHQuCgpmY2luZm8tPmFyZ3MgaXMgYSBOdWxsYWJsZURhdHVtW10gYXJyYXksIG5v dCBhIE5vZGUgcG9pbnRlci4gVGhlIG1hY3JvCmNhc3RzIGl0cyBhcmd1bWVudCB0byBOb2RlKiBh bmQgY2hlY2tzIHRoZSBOb2RlVGFnIGZpZWxkLiBXaGVuIGdpdmVuCmZjaW5mby0+YXJncywgaXQg cmVhZHMgdGhlIGZpcnN0IGFyZ3VtZW50J3MgRGF0dW0gdmFsdWUgYXMgYSBOb2RlVGFnLAp3aGlj aCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgbm90IG1hdGNoIFRfRXJyb3JTYXZlQ29udGV4dCwgY2F1 c2luZyB0aGUKc29mdCBlcnJvciBjaGVjayB0byBhbHdheXMgZXZhbHVhdGUgdG8gZmFsc2UuCgpB cyBhIHJlc3VsdCwgd2hlbiB0aGUgdGltZXN0YW1wdHotdG8tZGF0ZSBjb252ZXJzaW9uIGVuY291 bnRlcnMgYW4Kb3ZlcmZsb3cgaW4gZXJyb3Itc2FmZSBtb2RlLCB0aGUgZnVuY3Rpb24gd2lsbCBy ZXR1cm4gYSBnYXJiYWdlIGRhdGUKdmFsdWUgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgTlVMTC4K CkFsbCB0aHJlZSBzaWJsaW5nIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiB0aGUgc2FtZSBjb21taXQK KGRhdGVfdGltZXN0YW1wLCB0aW1lc3RhbXBfZGF0ZSwgZGF0ZV90aW1lc3RhbXB0eikgY29ycmVj dGx5IHVzZQpmY2luZm8tPmNvbnRleHQuCgpBdXRob3I6IEppYW5naHVhIFlhbmcgPHlqaGpzdHpA Z21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRlLmMgfCAyICstCiAxIGZp bGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RhdGUu YwppbmRleCA3MWVhMDQ4ZDI1MS4uYzMzMjc0NDAzODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9kYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RhdGUuYwpAQCAt MTQwMiw3ICsxNDAyLDcgQEAgdGltZXN0YW1wdHpfZGF0ZShQR19GVU5DVElPTl9BUkdTKQogCURh dGVBRFQJCXJlc3VsdDsKIAogCXJlc3VsdCA9IHRpbWVzdGFtcHR6MmRhdGVfc2FmZSh0aW1lc3Rh bXAsIGZjaW5mby0+Y29udGV4dCk7Ci0JaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoZmNpbmZvLT5h cmdzKSkKKwlpZiAoU09GVF9FUlJPUl9PQ0NVUlJFRChmY2luZm8tPmNvbnRleHQpKQogCQlQR19S RVRVUk5fTlVMTCgpOwogCiAJUEdfUkVUVVJOX0RBVEVBRFQocmVzdWx0KTsKLS0gCjIuNTAuMSAo QXBwbGUgR2l0LTE1NSkKCg== --00000000000038e510064dc709fb--