Re: BUG #19382: Server crash at __nss_database_lookup

From: surya poondla <suryapoondla4(at)gmail(dot)com>
To: dllggyx(at)outlook(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #19382: Server crash at __nss_database_lookup
Date: 2026-02-26 23:55:43
Message-ID: CAOVWO5pbgCVx0zgTr1mxZug2hoGwxZOk+-Owvwg0jaQv9JE3Fw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi All,

CFBot on the commitfest asked me to rebase my code, and during the rebase
(rebase to 17 Stable version) I realized my initial patch v1 might have
a memory management issue.
When conversion of type was needed, the old record object was never
properly freed, and the new record was being created in the wrong memory
context. v2 fixes this by passing the record variable directly to
convert_record_for_altered_type() and using assign_record_var() internally
to replace a record variable and this way correctly frees the old value,
transfers the new one into the right memory context.

Testing:
1) All 224 core regression tests pass
2) All 13 PL/pgSQL regression tests pass
3) All original test cases from the bug report produce correct results
(same results as my v1 patch) (adding them here again for quick reference)
and we no longer see the crash of the database.

psql (17.9)

Type "help" for help.

postgres=# DROP FUNCTION IF EXISTS bar();

DROP FUNCTION

postgres=# DROP TYPE IF EXISTS foo CASCADE;

DROP TYPE

postgres=# CREATE TYPE foo AS (a INT, b INT);

CREATE TYPE

postgres=# CREATE FUNCTION bar() RETURNS RECORD AS $$

postgres$# DECLARE

postgres$# r foo := ROW(123, power(2, 30));

postgres$# BEGIN

postgres$# ALTER TYPE foo ALTER ATTRIBUTE b TYPE TEXT;

postgres$# RETURN r;

postgres$# END;

postgres$# $$ LANGUAGE plpgsql;

CREATE FUNCTION

postgres=# SELECT bar();

bar

------------------

(123,1073741824)

(1 row)

postgres=# DROP FUNCTION IF EXISTS bar1();

DROP FUNCTION

postgres=# DROP TYPE IF EXISTS foo1 CASCADE;

DROP TYPE

postgres=# CREATE TYPE foo1 AS (a INT, b INT);

CREATE TYPE

postgres=# CREATE FUNCTION bar1(OUT r1 foo1) AS $$

postgres$# BEGIN

postgres$# r1 := ROW(1, 2);

postgres$# ALTER TYPE foo1 ALTER ATTRIBUTE b TYPE TEXT;

postgres$# RETURN;

postgres$# END;

postgres$# $$ LANGUAGE plpgsql;

CREATE FUNCTION

postgres=# SELECT bar1();

bar1

-------

(1,2)

(1 row)

postgres=# DROP TYPE IF EXISTS foo2 CASCADE;

NOTICE: drop cascades to function bar2()

DROP TYPE

postgres=# CREATE TYPE foo2 AS (a INT, b TEXT);

CREATE TYPE

postgres=# CREATE FUNCTION bar2() RETURNS foo2 AS $$

postgres$# DECLARE

postgres$# r foo2 := ROW(1, 'hello');

postgres$# BEGIN

postgres$# ALTER TYPE foo2 ALTER ATTRIBUTE b TYPE INT;

postgres$# RETURN r;

postgres$# END;

postgres$# $$ LANGUAGE plpgsql;

CREATE FUNCTION

postgres=# SELECT bar2();

ERROR: invalid input syntax for type integer: "hello"

CONTEXT: PL/pgSQL function bar2() line 6 at RETURN

postgres=# quit

Regards,
Surya Poondla

>

Attachment Content-Type Size
0002-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch application/octet-stream 6.8 KB

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message yuanchao zhang 2026-02-27 01:16:56 Re: BUG #19417: '\dD' fails to list user-defined domains that shadow built-in type names (e.g., 'numeric')
Previous Message Fujii Masao 2026-02-26 23:18:09 Re: basic_archive lost archive_directory