Thread

  1. [PATCH] Handle out-of-range timestamps in timestamptz_to_str()

    Алена Васильева <gorcom2012@gmail.com> — 2025-10-15T08:54:30Z

    Hello,
    
    The function timestamptz_to_str() in src/bin/pg_waldump/compat.c does not
    handle the case when localtime() returns NULL, which can happen for
    timestamps
    that are out of the supported time_t range on some platforms.
    
    This patch adds a simple check for a NULL return value and ensures that the
    function returns a clear error string "(timestamp out of range)" instead of
    causing undefined behavior or a crash.
    
    Best regards,
    
    Eugeny Goryachev
    
    
    *Patch attached for Postgres 16.6:*
    >From b443fb1a5b3b0f0ffb419c2eb7a7375c9d5b990e Mon Sep 17 00:00:00 2001
    From: Eugeny Goryachev <gorcom2012@gmail.com>
    Date: Wed, 15 Oct 2025 12:41:10 +0400
    Subject: [PATCH] Fix timestamptz_to_str() for out-of-range timestamps
    
    ---
    src/bin/pg_waldump/compat.c | 6 ++++++
    1 file changed, 6 insertions(+)
    
    diff --git a/src/bin/pg_waldump/compat.c b/src/bin/pg_waldump/compat.c
    index 2aca73f2e93..825311b1bd4 100644
    --- a/src/bin/pg_waldump/compat.c
    +++ b/src/bin/pg_waldump/compat.c
    @@ -54,6 +54,12 @@ timestamptz_to_str(TimestampTz t)
    time_t result = (time_t) timestamptz_to_time_t(t);
    struct tm *ltime = localtime(&result);
    + if (!ltime)
    + {
    + strlcpy(buf, "(timestamp out of range)", sizeof(buf));
    + return buf;
    + }
    +
    strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime);
    strftime(zone, sizeof(zone), "%Z", ltime);
    -- 
    2.43.0
    
    
    https://www.postgresql.org/message-id/flat/EAB008E3-6B87-413F-BA39-22A6ED5DF0F6%40yesql.se#61ba59bee3872723d4cfe809638f039b
    
  2. Re: [PATCH] Handle out-of-range timestamps in timestamptz_to_str()

    Chao Li <li.evan.chao@gmail.com> — 2025-10-15T09:12:53Z

    
    > On Oct 15, 2025, at 16:54, Алена Васильева <gorcom2012@gmail.com> wrote:
    > 
    > Hello,
    > 
    > The function timestamptz_to_str() in src/bin/pg_waldump/compat.c does not
    > handle the case when localtime() returns NULL, which can happen for timestamps
    > that are out of the supported time_t range on some platforms.
    > 
    > This patch adds a simple check for a NULL return value and ensures that the
    > function returns a clear error string "(timestamp out of range)" instead of
    > causing undefined behavior or a crash.
    > 
    > 
    I think we can just return a static const string, without copying the string into “buf" as the function returns a “const char *”.
    
    Best regards,
    --
    Chao Li (Evan)
    HighGo Software Co., Ltd.
    https://www.highgo.com/
    
    
    
    
    
  3. Re: [PATCH] Handle out-of-range timestamps in timestamptz_to_str()

    Daniel Gustafsson <daniel@yesql.se> — 2025-10-15T09:17:14Z

    > On 15 Oct 2025, at 11:12, Chao Li <li.evan.chao@gmail.com> wrote:
    >> On Oct 15, 2025, at 16:54, Алена Васильева <gorcom2012@gmail.com> wrote:
    
    >> The function timestamptz_to_str() in src/bin/pg_waldump/compat.c does not
    >> handle the case when localtime() returns NULL, which can happen for timestamps
    >> that are out of the supported time_t range on some platforms.
    >> 
    >> This patch adds a simple check for a NULL return value and ensures that the
    >> function returns a clear error string "(timestamp out of range)" instead of
    >> causing undefined behavior or a crash.
    
    Ah yes, thanks for the reminder, it's been on my todo from
    EAB008E3-6B87-413F-BA39-22A6ED5DF0F6@yesql.se for some time.
    
    > I think we can just return a static const string, without copying the string into “buf" as the function returns a “const char *”.
    
    The function is documented as returning a value pointing to a static buffer, so
    it seems better to consistently use that buffer.
    
    --
    Daniel Gustafsson