Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix COPY FROM ON_ERROR SET_NULL with selective column list

  1. COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list

    SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> — 2026-04-16T17:09:40Z

    HI hackers,
    
    domain_with_constraint[] was allocated with list_length(attnumlist)
    elements and indexed sequentially via foreach_current_index(), but
    copyfromparse.c accesses it via attnum - 1 (physical attribute index).
    With a partial column list targeting high-numbered columns, this caused
    an out-of-bounds read that bypassed domain NOT NULL checks, silently
    inserting NULL into NOT NULL domain columns.
    
    Fix by allocating with num_phys_attrs and indexing by attnum - 1,
    consistent with all other per-column arrays in BeginCopyFrom().
    
    Patch is attached, and added a new test case to cover this scenario.
    
    Repro:
    
    CREATE DOMAIN d_notnull_int AS int NOT NULL;
    CREATE TABLE t (
        c1 text, c2 text, c3 text, c4 text, c5 text,
        c6 text, c7 text, c8 text, c9 text,
        c10 d_notnull_int
    );
    
    COPY t(c1, c10) FROM stdin WITH (on_error set_null);
    hello    bad
    \.
    
    SELECT c10 IS NULL FROM t;
    
    Thanks,
    Satya
    
  2. Re: COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list

    jian he <jian.universality@gmail.com> — 2026-04-17T03:58:48Z

    On Fri, Apr 17, 2026 at 1:09 AM SATYANARAYANA NARLAPURAM
    <satyanarlapuram@gmail.com> wrote:
    >
    > HI hackers,
    >
    > domain_with_constraint[] was allocated with list_length(attnumlist)
    > elements and indexed sequentially via foreach_current_index(), but
    > copyfromparse.c accesses it via attnum - 1 (physical attribute index).
    > With a partial column list targeting high-numbered columns, this caused
    > an out-of-bounds read that bypassed domain NOT NULL checks, silently
    > inserting NULL into NOT NULL domain columns.
    >
    > Fix by allocating with num_phys_attrs and indexing by attnum - 1,
    > consistent with all other per-column arrays in BeginCopyFrom().
    >
    > Patch is attached, and added a new test case to cover this scenario.
    >
    
    The patch looks good to me.
    I simplified the tests.
    
    
    
    --
    jian
    https://www.enterprisedb.com/
    
  3. Re: COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list

    Fujii Masao <masao.fujii@gmail.com> — 2026-05-18T13:22:13Z

    On Fri, Apr 17, 2026 at 12:59 PM jian he <jian.universality@gmail.com> wrote:
    >
    > On Fri, Apr 17, 2026 at 1:09 AM SATYANARAYANA NARLAPURAM
    > <satyanarlapuram@gmail.com> wrote:
    > >
    > > HI hackers,
    > >
    > > domain_with_constraint[] was allocated with list_length(attnumlist)
    > > elements and indexed sequentially via foreach_current_index(), but
    > > copyfromparse.c accesses it via attnum - 1 (physical attribute index).
    > > With a partial column list targeting high-numbered columns, this caused
    > > an out-of-bounds read that bypassed domain NOT NULL checks, silently
    > > inserting NULL into NOT NULL domain columns.
    > >
    > > Fix by allocating with num_phys_attrs and indexing by attnum - 1,
    > > consistent with all other per-column arrays in BeginCopyFrom().
    > >
    > > Patch is attached, and added a new test case to cover this scenario.
    > >
    >
    > The patch looks good to me.
    > I simplified the tests.
    
    The patch looks good to me. Barring any objections, I will commit it.
    
    Regards,
    
    -- 
    Fujii Masao
    
    
    
    
  4. Re: COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list

    Chao Li <li.evan.chao@gmail.com> — 2026-05-18T22:27:54Z

    
    > On May 18, 2026, at 21:22, Fujii Masao <masao.fujii@gmail.com> wrote:
    > 
    > On Fri, Apr 17, 2026 at 12:59 PM jian he <jian.universality@gmail.com> wrote:
    >> 
    >> On Fri, Apr 17, 2026 at 1:09 AM SATYANARAYANA NARLAPURAM
    >> <satyanarlapuram@gmail.com> wrote:
    >>> 
    >>> HI hackers,
    >>> 
    >>> domain_with_constraint[] was allocated with list_length(attnumlist)
    >>> elements and indexed sequentially via foreach_current_index(), but
    >>> copyfromparse.c accesses it via attnum - 1 (physical attribute index).
    >>> With a partial column list targeting high-numbered columns, this caused
    >>> an out-of-bounds read that bypassed domain NOT NULL checks, silently
    >>> inserting NULL into NOT NULL domain columns.
    >>> 
    >>> Fix by allocating with num_phys_attrs and indexing by attnum - 1,
    >>> consistent with all other per-column arrays in BeginCopyFrom().
    >>> 
    >>> Patch is attached, and added a new test case to cover this scenario.
    >>> 
    >> 
    >> The patch looks good to me.
    >> I simplified the tests.
    > 
    > The patch looks good to me. Barring any objections, I will commit it.
    > 
    > Regards,
    > 
    > -- 
    > Fujii Masao
    
    I also found this bug and reported it here [1]. I just reviewed v2, the code change of the fix itself is exactly the same as my version in [1]. The new test is slightly different from my version, but I think that also works.
    
    [1] https://www.postgresql.org/message-id/8A72720A-55AC-4D41-B9DF-5610307600E6%40gmail.com
    
    Best regards,
    --
    Chao Li (Evan)
    HighGo Software Co., Ltd.
    https://www.highgo.com/
    
    
    
    
    
    
    
    
  5. Re: COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list

    Fujii Masao <masao.fujii@gmail.com> — 2026-05-19T01:13:22Z

    On Tue, May 19, 2026 at 7:28 AM Chao Li <li.evan.chao@gmail.com> wrote:
    > I also found this bug and reported it here [1]. I just reviewed v2, the code change of the fix itself is exactly the same as my version in [1]. The new test is slightly different from my version, but I think that also works.
    
    Thanks for the review! I've pushed the patch.
    
    Regards,
    
    -- 
    Fujii Masao