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 1vjSsI-00FZ1e-2H for pgsql-bugs@arkaria.postgresql.org; Sat, 24 Jan 2026 01:55:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vjSsG-0024jW-26 for pgsql-bugs@arkaria.postgresql.org; Sat, 24 Jan 2026 01:55:40 +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 1vjSsG-0024jO-0H for pgsql-bugs@lists.postgresql.org; Sat, 24 Jan 2026 01:55:40 +0000 Received: from mail-vs1-xe33.google.com ([2607:f8b0:4864:20::e33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vjSsD-001zsx-1n for pgsql-bugs@lists.postgresql.org; Sat, 24 Jan 2026 01:55:39 +0000 Received: by mail-vs1-xe33.google.com with SMTP id ada2fe7eead31-5ebb6392f58so822578137.0 for ; Fri, 23 Jan 2026 17:55:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769219737; cv=none; d=google.com; s=arc-20240605; b=Og9av9WsJ0R6wUAdQj1Sj1VJvgJypu7FeVlLL/o8Z5NMFeCl60PEVnAGK9Uva2LqSb 6UKpoofokehyNj4TbECLiuFIp5bD0oQaWboyq1CaUivrD7VaRMEsXCzCX6uo24fiCgMz ctUdSW77vQAQKa/KbUi4FBd4XCEDw7brNRuIuR8c/YBfM8bPZDoL9otpdaCXmTeOTe3l Sd/dp/ivViwNFvoJAsbp9/XwJC8EObKa3bt/hC5TCeLciKFMzzq3FGB0RebnT2dNjWWc n82eT2//oZnnvWi+zt2WMn6aKiW4fdFkt7oA9BKY4BqL4Yie/F7pGrRoYQCOQC+0Cz37 HwuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=yvMD1mknanisA0trk58mfjo5IRU7s3FgUgplrl4QYs0=; fh=A9gdNxkf35K/1FbseItSd+5m5fIFn0bPeTrj/lQtJO8=; b=YIlm+L2r5dk+QRkXZ9AFH45P7+v1IAyKEWQyPvIOqWqotP+6WTJxZLSCh3sSk2pKW5 QIQgXUbbrooIN8ToSOfR5Bd36ocpoMJ8fIBH9GF7FQYK5SvJTwwYGr5YyDBi3aePBbL/ FD2Fy1UgKSgiaxlYSyX1caj6JHtMuFk4EBewMaH+LxsOvwAtAXgiIF9fVblXP9aLwyRT aGxDJqoF3TKOhd/Z+KoCYk23jt+BEfvpgRtSBi0j/Tr6bJevXR29wNfHiaBbyB6CVO5l s6zE/8tMOwlXdpfcjHRd+RtUQW7fefETggxKGrFqxyOy22AyAMQuBn6r+y9cfvJWFvtc Atbw==; 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=20230601; t=1769219737; x=1769824537; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=yvMD1mknanisA0trk58mfjo5IRU7s3FgUgplrl4QYs0=; b=Lsmz1Hzihiq/Kn2TqoL/ZYyioFWkhPYFEtcSfbe9qZ+vH5vWEztZOlYkqn4BEjncmG aiaMd3S9Wn/p97PXz9+RmoWiHiB2sZexdRNnRdgGb86cAwGAbLq4NPusTolC2e7yLBGa +8iaTCaEnH3e7aWzkdneJB0uUb1yutcsMQw7ff36BVAZ9wcPmoVHX2gL5yjqtcBM4AVj dJE3/ahg7TLwmr4oIeGf+X4DvKZb08NnD+FGx6/2JGGCBz8zX3N0Q7sIr7RLoyGqrsvR A3VITbmYWUlcnrFSTWnhik84QZx9Rnmgxu/5FCDUheg/Z0x/mKyfBa/BYO+siFee3qtC Bodw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769219737; x=1769824537; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=yvMD1mknanisA0trk58mfjo5IRU7s3FgUgplrl4QYs0=; b=lYTpOlJKULmjl5J/Rw4g5FrfdWA/cFw83QGvqEMN7dzQzx+f06Ezn4FjL/s49IwAd9 l1rZUZZXQ0ZS/xXZg7Hmj3UIz4wbxSWcro3wK/XR+gflGAHWs+2THVuAXusFdyyTYyfI B48gSML3cA/SLZNtTzvng21qEZFRS0/5oOxJZHNuhxe+WmWls7IjYV6EhjAFXX3oeNqe f+WNEcwSI3/3iQykKt02ocN5ZEcrmWkrCBSdUuxh6ZwzOnnoOu7c2x2/L5LbiCPWTyei lOY2v6C4QsStAt4r6LOY0lzuV5HR6iKadEnhVLrvcdjeA5uXCG9nMCHNMDqM3H+6Enfd FL0w== X-Forwarded-Encrypted: i=1; AJvYcCUzdwDKBX3Uv4T7iXR7SjXOqG4//5/VO7NUcGX+3FQkAylJ6j8oiOq/53A3Qea12CvWEXIttU3GZfEv@lists.postgresql.org X-Gm-Message-State: AOJu0Yw+l0u7YkGdf8AMrPPur1oVzC8U6IGmPaA4hOilP0I+y9emzxcD QBNxb012DBAGrwQ/wz3gT9UNMLV/gCAygHdTmYlrvke3IjPNo3X/xTqXeDt99D1Jv312mL2/8N4 aJCBXdCzSpqMlhAF+RCdQc3VWef41PtY= X-Gm-Gg: AZuq6aII41pvsnzuj2Abcvou5gYtmZPXqZ8g1uQ07qhhKD8EuXeWgv68FNNEKUwCfuC pY1KmIbbLzb9JptlZQwjw1nW9LJ9DHCAZYaBQbHpzWjxB+rLSoWAe6WKKDXyWuxACmz3bz5R33h bafiTugtV1BNnq9RV/ytyFoExRsMYvhWIj9DJgpZcYMfn86QGBUvmbMx63gcoDfTv0/cD8rg+S0 eJN/omXlXV4ZMtp28zF7v36OHQvujF8NNgsD2BuJl7iSmipVZCB4B359vcJDQWh/H80A42EDFog XA== X-Received: by 2002:a05:6102:440b:b0:5dd:b5a2:b590 with SMTP id ada2fe7eead31-5f54bb40d26mr1434743137.16.1769219737309; Fri, 23 Jan 2026 17:55:37 -0800 (PST) MIME-Version: 1.0 References: <19382-4c2060ffee72759b@postgresql.org> In-Reply-To: From: surya poondla Date: Fri, 23 Jan 2026 17:55:25 -0800 X-Gm-Features: AZwV_QjDFASKIc1McwitVS_PmXEfLa3zauuUkRa0wlC_KVt0k5tWh-bwgHkUio0 Message-ID: Subject: Re: BUG #19382: Server crash at __nss_database_lookup To: dllggyx@outlook.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000f8fa4a06491891e9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f8fa4a06491891e9 Content-Type: multipart/alternative; boundary="000000000000f8fa4806491891e7" --000000000000f8fa4806491891e7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi All, I am working on a patch for this. > I built a patch on 17.6 postgres version. The overall issue is: When ALTER TYPE modifies column types, the type cache updates its tupDesc_identifier. However, existing ExpandedRecordHeader instances still reference the old tupdesc. When the record is returned and flattened, the output functions expect data to match the new type definition but receive data in the old format, causing type confusion (e.g., interpreting an integer as a text pointer). This was causing a segfault and crashing the server. In my solution (attached patch), I added convert_record_for_altered_type() function which detects type changes by comparing er_tupdesc_id against the current tupDesc_identifier. When a mismatch is found, it tries to convert each field value to match the new type definition, if this fails we error out. convert_record_for_altered_type() function is called in exec_stmt_return() and exec_stmt_return_next() before returning records. I tested my patch and see the below output postgres=3D# DROP FUNCTION IF EXISTS bar(); DROP FUNCTION postgres=3D# DROP TYPE IF EXISTS foo CASCADE; DROP TYPE postgres=3D# DROP FUNCTION IF EXISTS bar1(); DROP FUNCTION postgres=3D# DROP TYPE IF EXISTS foo1 CASCADE; DROP TYPE postgres=3D# CREATE TYPE foo AS (a INT, b INT); CREATE TYPE postgres=3D# CREATE FUNCTION bar() RETURNS RECORD AS $$ postgres$# DECLARE postgres$# r foo :=3D 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=3D# postgres=3D# SELECT bar(); bar ------------------ (123,1073741824) (1 row) postgres=3D# CREATE TYPE foo1 AS (a INT, b INT); CREATE TYPE postgres=3D# postgres=3D# CREATE FUNCTION bar1(OUT r1 foo1) AS $$ postgres$# BEGIN postgres$# r1 :=3D ROW(1, 2); postgres$# ALTER TYPE foo1 ALTER ATTRIBUTE b TYPE TEXT; postgres$# RETURN; postgres$# END; postgres$# $$ LANGUAGE plpgsql; CREATE FUNCTION postgres=3D# postgres=3D# SELECT bar1(); bar1 ------- (1,2) (1 row) postgres=3D# CREATE TYPE foo2 AS (a INT, b TEXT); CREATE TYPE postgres=3D# CREATE FUNCTION bar2() RETURNS foo2 AS $$ postgres$# DECLARE postgres$# r foo2 :=3D ROW(1, 'hello'); postgres$# BEGIN postgres$# ALTER TYPE foo2 ALTER ATTRIBUTE b TYPE INT; -- TEXT =E2= =86=92 INT postgres$# RETURN r; -- Should get clean error (not crash) postgres$# END; postgres$# $$ LANGUAGE plpgsql; CREATE FUNCTION postgres=3D# postgres=3D# SELECT bar2(); ERROR: invalid input syntax for type integer: "hello" CONTEXT: PL/pgSQL function bar2() line 6 at RETURN postgres=3D# --000000000000f8fa4806491891e7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi All,

I am working on a patch for this.


=
I built a patch on 17.6 postgres version.

The overall iss= ue=C2=A0is:
When ALTER TYPE modifies column types, the type cache= updates its tupDesc_identifier.=C2=A0
However, existing Expanded= RecordHeader instances still reference the old tupdesc.=C2=A0
Whe= n the record is returned and flattened, the output functions expect data to= match the new type definition but receive data in the old format, causing = type confusion (e.g., interpreting an integer as a text pointer).
This w= as causing a segfault=C2=A0and crashing the server.

In my solution (attached patch), I added convert_record_for_altered_type(= ) function which detects type changes by comparing er_tupdesc_id against th= e current tupDesc_identifier.=C2=A0
When a mismatch is found, it = tries to convert each field value to match the new type definition,=C2=A0if= this fails we error out.
convert_record_for_altered_type() function is= called in exec_stmt_return() and exec_stmt_return_next() before returning = records.

I tested my patch and see the below output
postgres=3D# = DROP FUNCTION IF EXISTS bar();
DROP FUNCTION
postgres=3D# DROP TYPE I= F EXISTS foo CASCADE;
DROP TYPE
postgres=3D# DROP FUNCTION IF EXISTS = bar1();
DROP FUNCTION
postgres=3D# DROP TYPE IF EXISTS foo1 CASCADE;<= br>DROP TYPE
postgres=3D# CREATE TYPE foo AS (a INT, b INT);
CREATE T= YPE
postgres=3D# CREATE FUNCTION bar() RETURNS RECORD AS $$
postgres$= # =C2=A0 DECLARE
postgres$# =C2=A0 =C2=A0 =C2=A0 r foo :=3D ROW(123, pow= er(2, 30));
postgres$# =C2=A0 BEGIN
postgres$# =C2=A0 =C2=A0 =C2=A0 A= LTER TYPE foo ALTER ATTRIBUTE b TYPE TEXT;
postgres$# =C2=A0 =C2=A0 =C2= =A0 RETURN r;
postgres$# =C2=A0 END;
postgres$# =C2=A0 $$ LANGUAGE pl= pgsql;
CREATE FUNCTION
postgres=3D#
postgres=3D# SELECT bar();
= =C2=A0 =C2=A0 =C2=A0 =C2=A0bar
------------------
=C2=A0(123,10737418= 24)
(1 row)

postgres=3D# CREATE TYPE foo1 AS (a INT, b INT);
C= REATE TYPE
postgres=3D#
postgres=3D# =C2=A0 CREATE FUNCTION bar1(OUT = r1 foo1) AS $$
postgres$# =C2=A0 BEGIN
postgres$# =C2=A0 =C2=A0 =C2= =A0 r1 :=3D ROW(1, 2);
postgres$# =C2=A0 =C2=A0 =C2=A0 ALTER TYPE foo1 A= LTER ATTRIBUTE b TYPE TEXT;
postgres$# =C2=A0 =C2=A0 =C2=A0 RETURN;
p= ostgres$# =C2=A0 END;
postgres$# =C2=A0 $$ LANGUAGE plpgsql;
CREATE F= UNCTION
postgres=3D#
postgres=3D# SELECT bar1();
=C2=A0bar1
---= ----
=C2=A0(1,2)
(1 row)

postgres=3D# CREATE TYPE foo2 AS (a I= NT, b TEXT);
CREATE TYPE
postgres=3D# CREATE FUNCTION bar2() RETURNS = foo2 AS $$
postgres$# =C2=A0 DECLARE
postgres$# =C2=A0 =C2=A0 =C2=A0 = r foo2 :=3D ROW(1, 'hello');
postgres$# =C2=A0 BEGIN
postgres= $# =C2=A0 =C2=A0 =C2=A0 ALTER TYPE foo2 ALTER ATTRIBUTE b TYPE INT; =C2=A0-= - TEXT =E2=86=92 INT
postgres$# =C2=A0 =C2=A0 =C2=A0 RETURN r; =C2=A0-- = Should get clean error (not crash)
postgres$# =C2=A0 END;
postgres$# = =C2=A0 $$ LANGUAGE plpgsql;
CREATE FUNCTION
postgres=3D#
postgres= =3D# SELECT bar2();
ERROR: =C2=A0invalid input syntax for type integer: = "hello"
CONTEXT: =C2=A0PL/pgSQL function bar2() line 6 at RETU= RN
postgres=3D#
--000000000000f8fa4806491891e7-- --000000000000f8fa4a06491891e9 Content-Type: application/octet-stream; name="0001-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Disposition: attachment; filename="0001-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkrnq68c0 RnJvbSAyZWQ1YjQxODFhMDI2NzI5MTY5ZTkyZThiY2QxNzVmNjJiMWRhYWIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog RnJpLCAyMyBKYW4gMjAyNiAxNzoyODo1NCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEZpeCAoYnVn ICMxOTM4Mikgc2VydmVyIGNyYXNoIHdoZW4gQUxURVIgVFlQRSBpcyB1c2VkCiBtaWQtdHJhbnNh Y3Rpb24gaW4gUEwvcGdTUUwKCldoZW4gQUxURVIgVFlQRSBjaGFuZ2VzIGEgY29tcG9zaXRlIHR5 cGUncyBjb2x1bW4gdHlwZXMgd2l0aGluIGEKdHJhbnNhY3Rpb24sIFBML3BnU1FMIHJlY29yZCB2 YXJpYWJsZXMgdGhhdCB3ZXJlIHBvcHVsYXRlZCBiZWZvcmUKdGhlIEFMVEVSIHN0aWxsIGhvbGQg ZGF0YSBpbiB0aGUgb2xkIGZvcm1hdC4gUmV0dXJuaW5nIHN1Y2ggcmVjb3JkcwpjYXVzZXMgYSBj cmFzaCBiZWNhdXNlIHRoZSBvdXRwdXQgZnVuY3Rpb25zIGV4cGVjdCBkYXRhIG1hdGNoaW5nIHRo ZQpuZXcgdHlwZSBkZWZpbml0aW9uLCBub3QgdGhlIG9sZCBvbmUuCgpUaGUgY3Jhc2ggbWFuaWZl c3RlZCBhcyBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiByZWNvcmRfb3V0KCkgd2hlbiBpdAphdHRl bXB0ZWQgdG8gaW50ZXJwcmV0IGludGVnZXIgZGF0YSBhcyBhIHRleHQgcG9pbnRlciwgZHVlIHRv IHRoZQptaXNtYXRjaCBiZXR3ZWVuIHRoZSBzdG9yZWQgZGF0YSBhbmQgdGhlIGN1cnJlbnQgdHlw ZSBkZWZpbml0aW9uLgotLS0KIHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgfCAxNjEgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxNjEgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgYi9z cmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IGU3YjBmMjU0NGI0Li41M2FkZDQxODgy YSAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYworKysgYi9zcmMvcGwv cGxwZ3NxbC9zcmMvcGxfZXhlYy5jCkBAIC00NTgsNiArNDU4LDkgQEAgc3RhdGljIGNoYXIgKmZv cm1hdF9wcmVwYXJlZHBhcmFtc2RhdGEoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIHN0YXRp YyBQTHBnU1FMX3ZhcmlhYmxlICptYWtlX2NhbGxzdG10X3RhcmdldChQTHBnU1FMX2V4ZWNzdGF0 ZSAqZXN0YXRlLAogCQkJCQkJCQkJCQkgIFBMcGdTUUxfZXhwciAqZXhwcik7CiAKK3N0YXRpYyBF eHBhbmRlZFJlY29yZEhlYWRlciAqY29udmVydF9yZWNvcmRfZm9yX2FsdGVyZWRfdHlwZShQTHBn U1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkJIEV4cGFuZGVkUmVjb3JkSGVh ZGVyICplcmgsCisJCQkJCQkJCQkJCQkJCQkgT2lkIHJlY3R5cGVpZCk7CiAKIC8qIC0tLS0tLS0t LS0KICAqIHBscGdzcWxfZXhlY19mdW5jdGlvbglDYWxsZWQgYnkgdGhlIGNhbGwgaGFuZGxlciBm b3IKQEAgLTMyNTEsNiArMzI1NCwxNSBAQCBleGVjX3N0bXRfcmV0dXJuKFBMcGdTUUxfZXhlY3N0 YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9yZXR1cm4gKnN0bXQpCiAJCQkJCS8qIElmIHJlY29y ZCBpcyBlbXB0eSwgd2UgcmV0dXJuIE5VTEwgbm90IGEgcm93IG9mIG51bGxzICovCiAJCQkJCWlm IChyZWMtPmVyaCAmJiAhRXhwYW5kZWRSZWNvcmRJc0VtcHR5KHJlYy0+ZXJoKSkKIAkJCQkJewor CQkJCQkJLyoKKwkJCQkJCSAqIENoZWNrIGlmIHRoZSByZWNvcmQncyBjb21wb3NpdGUgdHlwZSB3 YXMgYWx0ZXJlZCBzaW5jZQorCQkJCQkJICogdGhlIHJlY29yZCB3YXMgcG9wdWxhdGVkLiBJZiBz bywgY29udmVydCB0aGUgZGF0YSB0bworCQkJCQkJICogcHJldmVudCBjcmFzaGVzIHdoZW4gb3V0 cHV0dGluZyB0aGUgcmVjb3JkLgorCQkJCQkJICovCisJCQkJCQlpZiAocmVjLT5yZWN0eXBlaWQg IT0gUkVDT1JET0lEKQorCQkJCQkJCXJlYy0+ZXJoID0gY29udmVydF9yZWNvcmRfZm9yX2FsdGVy ZWRfdHlwZShlc3RhdGUsCisJCQkJCQkJCQkJCQkJCQkJCSAgIHJlYy0+ZXJoLAorCQkJCQkJCQkJ CQkJCQkJCQkgICByZWMtPnJlY3R5cGVpZCk7CiAJCQkJCQllc3RhdGUtPnJldHZhbCA9IEV4cGFu ZGVkUmVjb3JkR2V0RGF0dW0ocmVjLT5lcmgpOwogCQkJCQkJZXN0YXRlLT5yZXRpc251bGwgPSBm YWxzZTsKIAkJCQkJCWVzdGF0ZS0+cmV0dHlwZSA9IHJlYy0+cmVjdHlwZWlkOwpAQCAtMzQwNCw2 ICszNDE2LDE2IEBAIGV4ZWNfc3RtdF9yZXR1cm5fbmV4dChQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0 YXRlLAogCQkJCQlUdXBsZURlc2MJcmVjX3R1cGRlc2M7CiAJCQkJCVR1cGxlQ29udmVyc2lvbk1h cCAqdHVwbWFwOwogCisJCQkJCS8qCisJCQkJCSAqIENoZWNrIGlmIHRoZSByZWNvcmQncyBjb21w b3NpdGUgdHlwZSB3YXMgYWx0ZXJlZCBzaW5jZQorCQkJCQkgKiB0aGUgcmVjb3JkIHdhcyBwb3B1 bGF0ZWQuIElmIHNvLCBjb252ZXJ0IHRoZSBkYXRhIHRvCisJCQkJCSAqIHByZXZlbnQgY3Jhc2hl cyB3aGVuIHN0b3JpbmcgdG8gdGhlIHR1cGxlc3RvcmUuCisJCQkJCSAqLworCQkJCQlpZiAocmVj LT5yZWN0eXBlaWQgIT0gUkVDT1JET0lEICYmIHJlYy0+ZXJoICE9IE5VTEwpCisJCQkJCQlyZWMt PmVyaCA9IGNvbnZlcnRfcmVjb3JkX2Zvcl9hbHRlcmVkX3R5cGUoZXN0YXRlLAorCQkJCQkJCQkJ CQkJCQkJCSAgIHJlYy0+ZXJoLAorCQkJCQkJCQkJCQkJCQkJCSAgIHJlYy0+cmVjdHlwZWlkKTsK KwogCQkJCQkvKiBJZiByZWMgaXMgbnVsbCwgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYSByb3cgb2Yg bnVsbHMgKi8KIAkJCQkJaWYgKHJlYy0+ZXJoID09IE5VTEwpCiAJCQkJCQlpbnN0YW50aWF0ZV9l bXB0eV9yZWNvcmRfdmFyaWFibGUoZXN0YXRlLCByZWMpOwpAQCAtODg5NywzICs4OTE5LDE0MiBA QCBmb3JtYXRfcHJlcGFyZWRwYXJhbXNkYXRhKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAK IAlyZXR1cm4gcGFyYW1zdHIuZGF0YTsKIH0KKworLyoKKyAqIGNvbnZlcnRfcmVjb3JkX2Zvcl9h bHRlcmVkX3R5cGUKKyAqCisgKiBDaGVjayBpZiBhIHJlY29yZCdzIGNvbXBvc2l0ZSB0eXBlIGhh cyBiZWVuIGFsdGVyZWQgc2luY2UgdGhlIHJlY29yZAorICogd2FzIHBvcHVsYXRlZCwgYW5kIGlm IHNvLCBjb252ZXJ0IHRoZSByZWNvcmQgZGF0YSB0byBtYXRjaCB0aGUgbmV3CisgKiB0eXBlIGRl ZmluaXRpb24uIFRoaXMgcHJldmVudHMgY3Jhc2hlcyB0aGF0IGNhbiBvY2N1ciB3aGVuIHRoZSBz dG9yZWQKKyAqIGRhdGEgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCB0eXBlIGRlZmluaXRpb24u CisgKgorICogUmV0dXJucyBhIChwb3NzaWJseSBuZXcpIEV4cGFuZGVkUmVjb3JkSGVhZGVyIHdp dGggZGF0YSBtYXRjaGluZyB0aGUKKyAqIGN1cnJlbnQgdHlwZSBkZWZpbml0aW9uLgorICovCitz dGF0aWMgRXhwYW5kZWRSZWNvcmRIZWFkZXIgKgorY29udmVydF9yZWNvcmRfZm9yX2FsdGVyZWRf dHlwZShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQlFeHBhbmRlZFJlY29yZEhl YWRlciAqZXJoLAorCQkJCQkJCQlPaWQgcmVjdHlwZWlkKQoreworCVR1cGxlRGVzYwkJb2xkX3R1 cGRlc2M7CisJVHVwbGVEZXNjCQluZXdfdHVwZGVzYzsKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50 cnk7CisJdWludDY0CQkJY3VycmVudF90dXBkZXNjX2lkOworCUV4cGFuZGVkUmVjb3JkSGVhZGVy ICpuZXdfZXJoOworCURhdHVtCQkgICAqb2xkX3ZhbHVlczsKKwlib29sCQkgICAqb2xkX251bGxz OworCURhdHVtCQkgICAqbmV3X3ZhbHVlczsKKwlib29sCQkgICAqbmV3X251bGxzOworCWludAkJ CQluYXR0czsKKwlpbnQJCQkJaTsKKwlNZW1vcnlDb250ZXh0CW9sZGN4dDsKKwlib29sCQkJbmVl ZF9jb252ZXJzaW9uID0gZmFsc2U7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciBhbm9ueW1vdXMg UkVDT1JEIHR5cGUgKi8KKwlpZiAocmVjdHlwZWlkID09IFJFQ09SRE9JRCkKKwkJcmV0dXJuIGVy aDsKKworCS8qIEdldCBjdXJyZW50IHR5cGUgZGVmaW5pdGlvbiBmcm9tIHR5cGNhY2hlICovCisJ dHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZShyZWN0eXBlaWQsCisJCQkJCQkJCSBUWVBFQ0FD SEVfVFVQREVTQyB8CisJCQkJCQkJCSBUWVBFQ0FDSEVfRE9NQUlOX0JBU0VfSU5GTyk7CisJaWYg KHR5cGVudHJ5LT50eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQorCQl0eXBlbnRyeSA9IGxvb2t1 cF90eXBlX2NhY2hlKHR5cGVudHJ5LT5kb21haW5CYXNlVHlwZSwKKwkJCQkJCQkJCSBUWVBFQ0FD SEVfVFVQREVTQyk7CisKKwljdXJyZW50X3R1cGRlc2NfaWQgPSB0eXBlbnRyeS0+dHVwRGVzY19p ZGVudGlmaWVyOworCisJLyogSWYgdHlwZSBoYXNuJ3QgY2hhbmdlZCwgbm90aGluZyB0byBkbyAo ZmFzdCBwYXRoKSAqLworCWlmIChlcmgtPmVyX3R1cGRlc2NfaWQgPT0gY3VycmVudF90dXBkZXNj X2lkKQorCQlyZXR1cm4gZXJoOworCisJLyoKKwkgKiBUeXBlIHZlcnNpb24gaGFzIGNoYW5nZWQu IE5lZWQgdG8gY2hlY2sgaWYgZmllbGQgdHlwZXMgYWN0dWFsbHkgZGlmZmVyCisJICogYW5kIGNv bnZlcnQgaWYgbmVjZXNzYXJ5LgorCSAqLworCW9sZF90dXBkZXNjID0gZXJoLT5lcl90dXBkZXNj OworCW5ld190dXBkZXNjID0gdHlwZW50cnktPnR1cERlc2M7CisKKwkvKiBTYW5pdHkgY2hlY2s6 IG11c3QgaGF2ZSBzYW1lIG51bWJlciBvZiBhdHRyaWJ1dGVzICovCisJaWYgKG9sZF90dXBkZXNj LT5uYXR0cyAhPSBuZXdfdHVwZGVzYy0+bmF0dHMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJIGVycm1zZygicmVjb3JkIHR5 cGUgXCIlc1wiIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCIsCisJCQkJCQlmb3JtYXRfdHlwZV9iZShy ZWN0eXBlaWQpKSwKKwkJCQkgZXJyZGV0YWlsKCJOdW1iZXIgb2YgY29sdW1ucyBjaGFuZ2VkIGZy b20gJWQgdG8gJWQuIiwKKwkJCQkJCSAgIG9sZF90dXBkZXNjLT5uYXR0cywgbmV3X3R1cGRlc2Mt Pm5hdHRzKSkpOworCisJbmF0dHMgPSBvbGRfdHVwZGVzYy0+bmF0dHM7CisKKwkvKiBEZWNvbnN0 cnVjdCB0aGUgb2xkIHJlY29yZCB0byBhY2Nlc3MgZmllbGQgdmFsdWVzICovCisJZGVjb25zdHJ1 Y3RfZXhwYW5kZWRfcmVjb3JkKGVyaCk7CisJb2xkX3ZhbHVlcyA9IGVyaC0+ZHZhbHVlczsKKwlv bGRfbnVsbHMgPSBlcmgtPmRudWxsczsKKworCS8qIEFsbG9jYXRlIGFycmF5cyBmb3IgbmV3IHZh bHVlcyAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhnZXRfZXZhbF9tY29udGV4 dChlc3RhdGUpKTsKKwluZXdfdmFsdWVzID0gKERhdHVtICopIHBhbGxvYyhuYXR0cyAqIHNpemVv ZihEYXR1bSkpOworCW5ld19udWxscyA9IChib29sICopIHBhbGxvYyhuYXR0cyAqIHNpemVvZihi b29sKSk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkvKiBDb252ZXJ0IGVh Y2ggZmllbGQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdf YXR0cmlidXRlIG9sZF9hdHQgPSBUdXBsZURlc2NBdHRyKG9sZF90dXBkZXNjLCBpKTsKKwkJRm9y bV9wZ19hdHRyaWJ1dGUgbmV3X2F0dCA9IFR1cGxlRGVzY0F0dHIobmV3X3R1cGRlc2MsIGkpOwor CisJCS8qIFNraXAgZHJvcHBlZCBjb2x1bW5zICovCisJCWlmIChvbGRfYXR0LT5hdHRpc2Ryb3Bw ZWQgfHwgbmV3X2F0dC0+YXR0aXNkcm9wcGVkKQorCQl7CisJCQluZXdfdmFsdWVzW2ldID0gKERh dHVtKSAwOworCQkJbmV3X251bGxzW2ldID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ LyogSWYgbnVsbCwgc3RheXMgbnVsbCAqLworCQlpZiAob2xkX251bGxzW2ldKQorCQl7CisJCQlu ZXdfdmFsdWVzW2ldID0gKERhdHVtKSAwOworCQkJbmV3X251bGxzW2ldID0gdHJ1ZTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJLyogSWYgc2FtZSB0eXBlLCBubyBjb252ZXJzaW9uIG5lZWRlZCAq LworCQlpZiAob2xkX2F0dC0+YXR0dHlwaWQgPT0gbmV3X2F0dC0+YXR0dHlwaWQgJiYKKwkJCShv bGRfYXR0LT5hdHR0eXBtb2QgPT0gbmV3X2F0dC0+YXR0dHlwbW9kIHx8CisJCQkgbmV3X2F0dC0+ YXR0dHlwbW9kID09IC0xKSkKKwkJeworCQkJbmV3X3ZhbHVlc1tpXSA9IG9sZF92YWx1ZXNbaV07 CisJCQluZXdfbnVsbHNbaV0gPSBmYWxzZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRGlm ZmVyZW50IHR5cGU6IGNvbnZlcnQgdXNpbmcgZXhlY19jYXN0X3ZhbHVlICovCisJCW5lZWRfY29u dmVyc2lvbiA9IHRydWU7CisJCW5ld19udWxsc1tpXSA9IGZhbHNlOworCQluZXdfdmFsdWVzW2ld ID0gZXhlY19jYXN0X3ZhbHVlKGVzdGF0ZSwKKwkJCQkJCQkJCQlvbGRfdmFsdWVzW2ldLAorCQkJ CQkJCQkJCSZuZXdfbnVsbHNbaV0sCisJCQkJCQkJCQkJb2xkX2F0dC0+YXR0dHlwaWQsCisJCQkJ CQkJCQkJb2xkX2F0dC0+YXR0dHlwbW9kLAorCQkJCQkJCQkJCW5ld19hdHQtPmF0dHR5cGlkLAor CQkJCQkJCQkJCW5ld19hdHQtPmF0dHR5cG1vZCk7CisJfQorCisJLyogSWYgbm8gYWN0dWFsIGNv bnZlcnNpb24gd2FzIG5lZWRlZCwgcmV0dXJuIG9yaWdpbmFsICovCisJaWYgKCFuZWVkX2NvbnZl cnNpb24pCisJeworCQlwZnJlZShuZXdfdmFsdWVzKTsKKwkJcGZyZWUobmV3X251bGxzKTsKKwkJ cmV0dXJuIGVyaDsKKwl9CisKKwkvKiBCdWlsZCBuZXcgZXhwYW5kZWQgcmVjb3JkIHdpdGggY29u dmVydGVkIHZhbHVlcyAqLworCW5ld19lcmggPSBtYWtlX2V4cGFuZGVkX3JlY29yZF9mcm9tX3R5 cGVpZChyZWN0eXBlaWQsIC0xLAorCQkJCQkJCQkJCQkJZXN0YXRlLT50dXBsZV9zdG9yZV9jeHQg PworCQkJCQkJCQkJCQkJZXN0YXRlLT50dXBsZV9zdG9yZV9jeHQgOgorCQkJCQkJCQkJCQkJQ3Vy cmVudE1lbW9yeUNvbnRleHQpOworCWV4cGFuZGVkX3JlY29yZF9zZXRfZmllbGRzKG5ld19lcmgs IG5ld192YWx1ZXMsIG5ld19udWxscywgdHJ1ZSk7CisKKwlyZXR1cm4gbmV3X2VyaDsKK30KLS0g CjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000f8fa4a06491891e9--