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.94.2) (envelope-from ) id 1rpUEV-006yqr-6e for pgsql-hackers@arkaria.postgresql.org; Wed, 27 Mar 2024 14:26:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rpUEU-00FNmU-4c for pgsql-hackers@arkaria.postgresql.org; Wed, 27 Mar 2024 14:26:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rpUET-00FNlr-OP for pgsql-hackers@lists.postgresql.org; Wed, 27 Mar 2024 14:26:25 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rpUEQ-006ng8-J1 for pgsql-hackers@lists.postgresql.org; Wed, 27 Mar 2024 14:26:25 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-56899d9bf52so8691351a12.2 for ; Wed, 27 Mar 2024 07:26:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711549581; x=1712154381; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=VV8coDStTuSqHUs/kXRBMaMsASvDZ14NePkJaGrGrR0=; b=KZKOOGqMheuaINQIMZOA1QdTiuNikWbt3pxsI3BRzhy/R5LnQH9VqZHKiwt1qL/3t9 8v5Bd53EttLlZCvOLkocnEXlO0drvjSOoB+104yaxdAoLgqt+EFqqM/cmEC36GxX3/lF Tt22YlTeZA2LFHHOJiAheQvV6/Uos8W9Rq3zqjOWbLa3T2zshyNn+px9Fjp3rXozXk+B 6Bf60ZCDyPi6AdOcHXVLmyJpyIc7RynDMOHGb+b/E1wGrYTG3w6mVdEwT+p+cjBHOsZu EoT0ohrSEDXq5yYaYmh+Ne/1F4Dwg4WKDfGxWEayeQRVAmnnwFKXkigYy123aTcOVn8X dLOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711549581; x=1712154381; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=VV8coDStTuSqHUs/kXRBMaMsASvDZ14NePkJaGrGrR0=; b=hIth7s/lFanFfB40Aor58FxsR+5RhmGceZoZttOvrVEQVgvEQ6EXYs9OY0S49Vqa6i rDxPc/w2Xky31zfj0rjdEL/S5HZbgxzyxdaLGX+tOc9sSNpBiw+ae344IntPmoKYnV/V brXo4xWLY0bgnBvzh8lQrfncF+cbHROLfC52UGfpEzxQMY1Mf8lTO7e97WMSNUr60YiM WyKVbpwyJbl1if3Ki6h4yRH7s7MQST7k9XSYBlYU9zi9HcbnDNDRc6NBsHYYGku0YQqw VWy9r5pL+E6X5STvdcNII2qzhDSzN8NK4ULAymKcqLrGal7zIyRV0aONqYkdMagg1zo9 KjWQ== X-Gm-Message-State: AOJu0Ywa5l/TJqlzCMHhWJ96K9cbBy79sjdDTTV/jRo7DqdjYgvQ6A/x v1/S4Nukv/Y/Q5vTqS//NL800dxHln/nEbVlMLW9zTgMuC1yJOmhuiEWE4t7CItFAkaa1dpVE8/ il0nSIcWcT9d/um6pv++0rY6esi4= X-Google-Smtp-Source: AGHT+IHol74fduVLMGBCRTO/MDbYEOP7n9egDBrNx1wkz/Il0Ib0PNy1daxTESWv9WEdHz2/L/ys0U45fAspTFiUVCA= X-Received: by 2002:a17:906:6d9:b0:a47:669:d0f2 with SMTP id v25-20020a17090606d900b00a470669d0f2mr1170558ejb.50.1711549581217; Wed, 27 Mar 2024 07:26:21 -0700 (PDT) MIME-Version: 1.0 References: <202403261525.ciahntfgj25o@alvherre.pgsql> In-Reply-To: <202403261525.ciahntfgj25o@alvherre.pgsql> From: Tender Wang Date: Wed, 27 Mar 2024 22:26:10 +0800 Message-ID: Subject: Re: Can't find not null constraint, but \d+ shows that To: Alvaro Herrera Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cde9bc0614a53039" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cde9bc0614a53039 Content-Type: multipart/alternative; boundary="000000000000cde9bb0614a53037" --000000000000cde9bb0614a53037 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Alvaro Herrera =E4=BA=8E2024=E5=B9=B43=E6=9C=8826= =E6=97=A5=E5=91=A8=E4=BA=8C 23:25=E5=86=99=E9=81=93=EF=BC=9A > On 2024-Mar-26, Tender Wang wrote: > > > postgres=3D# CREATE TABLE t1(c0 int, c1 int); > > postgres=3D# ALTER TABLE t1 ADD CONSTRAINT Q PRIMARY KEY(c0, c1); > > postgres=3D# ALTER TABLE t1 DROP c1; > > > > postgres=3D# ALTER TABLE t1 ALTER c0 DROP NOT NULL; > > ERROR: could not find not-null constraint on column "c0", relation "t1= " > > Ooh, hah, what happens here is that we drop the PK constraint > indirectly, so we only go via doDeletion rather than the tablecmds.c > code, so we don't check the attnotnull flags that the PK was protecting. > > > The attached patch is my workaround solution. Look forward your apply. > > Yeah, this is not a very good approach -- I think you're just guessing > that the column is marked NOT NULL because a PK was dropped in the > past -- but really what this catalog state is, is corrupted contents > because the PK drop was mishandled. At least in theory there are other > ways to drop a constraint other than dropping one of its columns (for > example, maybe this could happen if you drop a collation that the PK > depends on). The right approach is to ensure that the PK drop always > does the dance that ATExecDropConstraint does. A good fix probably just > moves some code from dropconstraint_internal to RemoveConstraintById. > I found some types ddl would check the attnotnull of column is true, for example: AT_ReAddIndex, AT_ReplicaIdentity. So we should add AT_SetAttNotNull sub-command to the wqueue. I add a new AT_PASS_OLD_COL_ATTRS to make sure AT_SetAttNotNull will have done when do AT_ReAddIndex or AT_ReplicaIdentity. --=20 Tender Wang OpenPie: https://en.openpie.com/ --000000000000cde9bb0614a53037 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
Alvaro Herrera <alvherre@alvh.no-ip.org> =E4=BA=8E2024=E5= =B9=B43=E6=9C=8826=E6=97=A5=E5=91=A8=E4=BA=8C 23:25=E5=86=99=E9=81=93=EF=BC= =9A
On 2024-Mar-= 26, Tender Wang wrote:

> postgres=3D# CREATE TABLE t1(c0 int, c1 int);
> postgres=3D# ALTER TABLE=C2=A0 t1 ADD CONSTRAINT Q PRIMARY KEY(c0, c1)= ;
> postgres=3D# ALTER TABLE=C2=A0 t1 DROP c1;
>
> postgres=3D# ALTER TABLE=C2=A0 t1=C2=A0 ALTER c0 DROP NOT NULL;
> ERROR:=C2=A0 could not find not-null constraint on column "c0&quo= t;, relation "t1"

Ooh, hah, what happens here is that we drop the PK constraint
indirectly, so we only go via doDeletion rather than the tablecmds.c
code, so we don't check the attnotnull flags that the PK was protecting= .

> The attached patch is my workaround solution.=C2=A0 Look forward your = apply.

Yeah, this is not a very good approach -- I think you're just guessing<= br> that the column is marked NOT NULL because a PK was dropped in the
past -- but really what this catalog state is, is corrupted contents
because the PK drop was mishandled.=C2=A0 At least in theory there are othe= r
ways to drop a constraint other than dropping one of its columns (for
example, maybe this could happen if you drop a collation that the PK
depends on).=C2=A0 The right approach is to ensure that the PK drop always<= br> does the dance that ATExecDropConstraint does.=C2=A0 A good fix probably ju= st
moves some code from dropconstraint_internal to RemoveConstraintById.

I found some types ddl would check the attno= tnull of column is true, for example:=C2=A0=C2=A0AT_ReAddIndex,=C2=A0AT_Rep= licaIdentity.
So we should add=C2=A0AT_SetAttNotNull sub-command = to the wqueue. I add a new=C2=A0AT_PASS_OLD_COL_ATTRS to make sure
AT_SetAttNotNull=C2=A0 will have done when do AT_ReAddIndex or AT_Replica= Identity.=C2=A0



--
Tender Wang
OpenPie:= =C2=A0=C2=A0https://e= n.openpie.com/
--000000000000cde9bb0614a53037-- --000000000000cde9bc0614a53039 Content-Type: application/octet-stream; name="v2-0001-Fix-pg_attribute-attnotnull-not-reset-when-droppe.patch" Content-Disposition: attachment; filename="v2-0001-Fix-pg_attribute-attnotnull-not-reset-when-droppe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu9w4v7u0 RnJvbSA5Yzg0ZTY5Yjk0ZjlhMDA5NGQyMjRlNWFmM2I0MGY1MWE4ZmFjMDFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAidGVuZGVyLndhbmciIDx0ZW5kZXIud2FuZ0BvcGVucGllLmNv bT4KRGF0ZTogV2VkLCAyNyBNYXIgMjAyNCAyMjowMDoxNyArMDgwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEZpeCBwZ19hdHRyaWJ1dGUgYXR0bm90bnVsbCBub3QgcmVzZXQgd2hlbiBkcm9wcGVkIFBL CiBpbmRpcmVjdGx5LgoKU2luY2UgYjBlOTZmMzExOSwgd2Ugd2lsbCByZXNldCBwZ19hdHRyaWJ1 dGUgYXR0bm90bnVsbCB3aGVuIGRyb3AKcGsgY29uc3RyYWludCBhbmQgbm90IGRpZmluZSBOT1Qg TlVMTC4gQnV0IGluIHNvbWUgY2FzZXMsIFBLIHdpbGwKYmUgZHJvcHBlZCBpbmRpcmVjdGx5LCB3 aGljaCB3aWxsIG5vdCBjYWxsIHRhYmxlY21kcy5jIGNvZGVzLgoKVGhlIHJlc3VsdCBpcyBcZCB3 aWxsIHNob3cgbm90IG51bGwsIGJ1dCB3ZSBjYW4ndCBkcm9wIE5PVCBOVUxMLgpNb3Zpbmcgc29t ZSBjb2RlIGZyb20gZHJvcGNvbnN0cmFpbnRfaW50ZXJuYWwgdG8gUmVtb3ZlQ29uc3RyYWludEJ5 SWQKY2FuIGZpeCB0aGlzIGlzc3VlLgoKV2Ugc2hvdWxkIGFkZCBTZXRBdHRyTm90TnVsbCBzdWIt Y29tbWFuZCBmb3Igc29tZSBBbHRlciBUYWJsZS4gQmVjYXVzZQp0aG9zZSBERExzIHdpbGwgY2hl Y2sgYXR0bm90bnVsbCBpcyB0cnVlIGR1cmluZyBEREwuCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19jb25zdHJhaW50LmMgICAgICAgfCAxMjMgKysrKysrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCAgMTEgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY29uc3RyYWludHMub3V0IHwgICA2ICsrCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9jb25zdHJhaW50cy5zcWwgICAgICB8ICAgNyArKwogNCBmaWxlcyBjaGFuZ2VkLCAx NDIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29uc3Ry YWludC5jCmluZGV4IDYwNDI4MGQzMjIuLjhjMjcwOTA5YmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfY29uc3RyYWludC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf Y29uc3RyYWludC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Rh YmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFs b2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRhbG9n L2hlYXAuaCIKQEAgLTkxNiw2ICs5MTcsOCBAQCBSZW1vdmVDb25zdHJhaW50QnlJZChPaWQgY29u SWQpCiAJUmVsYXRpb24JY29uRGVzYzsKIAlIZWFwVHVwbGUJdHVwOwogCUZvcm1fcGdfY29uc3Ry YWludCBjb247CisJTGlzdAkqdW5jb25zdHJhaW5lZF9jb2xzID0gTklMOworCWJvb2wJZHJvcHBp bmdfcGsgPSBmYWxzZTsKIAogCWNvbkRlc2MgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIApAQCAtOTY3LDYgKzk3MCwzMiBAQCBSZW1vdmVDb25z dHJhaW50QnlJZChPaWQgY29uSWQpCiAKIAkJCXRhYmxlX2Nsb3NlKHBncmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKIAkJfQorCQllbHNlIGlmIChjb24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9QUklN QVJZKQorCQl7CisJCQlEYXR1bSBhZGF0dW07CisJCQlBcnJheVR5cGUgKmFycjsKKwkJCWludCBu dW1rZXlzOworCQkJYm9vbCBpc051bGw7CisJCQlpbnQxNiAqYXR0bnVtczsKKworCQkJZHJvcHBp bmdfcGsgPSB0cnVlOworCisJCQlhZGF0dW0gPSBoZWFwX2dldGF0dHIodHVwLCBBbnVtX3BnX2Nv bnN0cmFpbnRfY29ua2V5LAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY29uRGVzYyksICZp c051bGwpOworCQkJaWYgKGlzTnVsbCkKKwkJCQllbG9nKEVSUk9SLCAibnVsbCBjb25rZXkgZm9y IGNvbnN0cmFpbnQgJXUiLCBjb24tPm9pZCk7CisJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAo YWRhdHVtKTsgLyogZW5zdXJlIG5vdCB0b2FzdGVkICovCisJCQludW1rZXlzID0gQVJSX0RJTVMo YXJyKVswXTsKKwkJCWlmIChBUlJfTkRJTShhcnIpICE9IDEgfHwKKwkJCQludW1rZXlzIDwgMCB8 fAorCQkJCUFSUl9IQVNOVUxMKGFycikgfHwKKwkJCQlBUlJfRUxFTVRZUEUoYXJyKSAhPSBJTlQy T0lEKQorCQkJCWVsb2coRVJST1IsICJjb25rZXkgaXMgbm90IGEgMS1EIHNtYWxsaW50IGFycmF5 Iik7CisJCQlhdHRudW1zID0gKGludDE2ICopQVJSX0RBVEFfUFRSKGFycik7CisKKwkJCWZvciAo aW50IGkgPSAwOyBpIDwgbnVta2V5czsgaSsrKQorCQkJCXVuY29uc3RyYWluZWRfY29scyA9IGxh cHBlbmRfaW50KHVuY29uc3RyYWluZWRfY29scywgYXR0bnVtc1tpXSk7CisJCX0KIAogCQkvKiBL ZWVwIGxvY2sgb24gY29uc3RyYWludCdzIHJlbCB1bnRpbCBlbmQgb2YgeGFjdCAqLwogCQl0YWJs ZV9jbG9zZShyZWwsIE5vTG9jayk7CkBAIC05ODYsNiArMTAxNSwxMDAgQEAgUmVtb3ZlQ29uc3Ry YWludEJ5SWQoT2lkIGNvbklkKQogCS8qIEZyeSB0aGUgY29uc3RyYWludCBpdHNlbGYgKi8KIAlD YXRhbG9nVHVwbGVEZWxldGUoY29uRGVzYywgJnR1cC0+dF9zZWxmKTsKIAorCS8qCisJICogSWYg dGhpcyB3YXMgYSBOT1QgTlVMTCBvciB0aGUgcHJpbWFyeSBrZXksIHRoZSBjb25zdHJhaW5lZCBj b2x1bW5zIG11c3QKKwkgKiBoYXZlIGhhZCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBzZXQuICBT ZWUgaWYgd2UgbmVlZCB0byByZXNldCBpdCwgYW5kCisJICogZG8gc28uCisJICovCisJaWYgKHVu Y29uc3RyYWluZWRfY29scykKKwl7CisJCVJlbGF0aW9uCWF0dHJlbDsKKwkJUmVsYXRpb24JcmVs OworCQlCaXRtYXBzZXQgICpwa2NvbHM7CisJCUJpdG1hcHNldCAgKmlyY29sczsKKwkJTGlzdENl bGwgICAqbGM7CisKKwkJLyogTWFrZSB0aGUgYWJvdmUgZGVsZXRpb24gdmlzaWJsZSAqLworCQlD b21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJCWF0dHJlbCA9IHRhYmxlX29wZW4oQXR0cmli dXRlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJCXJlbCA9IHRhYmxlX29wZW4oY29u LT5jb25yZWxpZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byB0 ZXN0IGNvbHVtbnMgZm9yIHRoZWlyIHByZXNlbmNlIGluIHRoZSBwcmltYXJ5IGtleSwgYnV0CisJ CSAqIG9ubHkgaWYgd2UncmUgbm90IGRyb3BwaW5nIGl0LgorCQkgKi8KKwkJcGtjb2xzID0gZHJv cHBpbmdfcGsgPyBOVUxMIDoKKwkJCVJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbCwKKwkJ CQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1BSSU1BUllfS0VZKTsKKwkJaXJjb2xzID0gUmVs YXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsLCBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9L RVkpOworCisJCWZvcmVhY2gobGMsIHVuY29uc3RyYWluZWRfY29scykKKwkJeworCQkJQXR0ck51 bWJlcglhdHRudW0gPSBsZmlyc3RfaW50KGxjKTsKKwkJCUhlYXBUdXBsZQlhdHR0dXA7CisJCQlI ZWFwVHVwbGUJY29udHVwOworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0Rm9ybTsKKworCQkJLyoK KwkJCSAqIE9idGFpbiBwZ19hdHRyaWJ1dGUgdHVwbGUgYW5kIHZlcmlmeSBjb25kaXRpb25zIG9u IGl0LiAgV2UgdXNlCisJCQkgKiBhIGNvcHkgd2UgY2FuIHNjcmliYmxlIG9uLgorCQkJICovCisJ CQlhdHR0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHlBdHROdW0oUmVsYXRpb25HZXRSZWxpZChyZWwp LCBhdHRudW0pOworCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHR1cCkpCisJCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiAl dSIsCisJCQkJCSBhdHRudW0sIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQlhdHRGb3JtID0g KEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0dHVwKTsKKworCQkJLyoKKwkJCSAqIFNp bmNlIHRoZSBhYm92ZSBkZWxldGlvbiBoYXMgYmVlbiBtYWRlIHZpc2libGUsIHdlIGNhbiBub3cK KwkJCSAqIHNlYXJjaCBmb3IgYW55IHJlbWFpbmluZyBjb25zdHJhaW50cyBvbiB0aGlzIGNvbHVt biAob3IgdGhlc2UKKwkJCSAqIGNvbHVtbnMsIGluIHRoZSBjYXNlIHdlJ3JlIGRyb3BwaW5nIGEg bXVsdGljb2wgcHJpbWFyeSBrZXkuKQorCQkJICogVGhlbiwgdmVyaWZ5IHdoZXRoZXIgYW55IGZ1 cnRoZXIgTk9UIE5VTEwgb3IgcHJpbWFyeSBrZXkKKwkJCSAqIGV4aXN0cywgYW5kIHJlc2V0IGF0 dG5vdG51bGwgaWYgbm9uZS4KKwkJCSAqCisJCQkgKiBIb3dldmVyLCBpZiB0aGlzIGlzIGEgZ2Vu ZXJhdGVkIGlkZW50aXR5IGNvbHVtbiwgYWJvcnQgdGhlCisJCQkgKiB3aG9sZSB0aGluZyB3aXRo IGEgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSwgYmVjYXVzZSB0aGUKKwkJCSAqIGNvbnN0cmFpbnQg aXMgcmVxdWlyZWQgaW4gdGhhdCBjYXNlLgorCQkJICovCisJCQljb250dXAgPSBmaW5kTm90TnVs bENvbnN0cmFpbnRBdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0pOworCQkJaWYg KGNvbnR1cCB8fAorCQkJCWJtc19pc19tZW1iZXIoYXR0bnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlciwKKwkJCQkJCQkgIHBrY29scykpCisJCQkJY29udGludWU7CisKKwkJ CS8qCisJCQkgKiBJdCdzIG5vdCB2YWxpZCB0byBkcm9wIHRoZSBub3QtbnVsbCBjb25zdHJhaW50 IGZvciBhIEdFTkVSQVRFRAorCQkJICogQVMgSURFTlRJVFkgY29sdW1uLgorCQkJICovCisJCQlp ZiAoYXR0Rm9ybS0+YXR0aWRlbnRpdHkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNv ZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCQllcnJt c2coImNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGlzIGFuIGlkZW50aXR5IGNvbHVt biIsCisJCQkJCQkJICAgZ2V0X2F0dG5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0s CisJCQkJCQkJCQkJICAgZmFsc2UpLAorCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCkpKTsKKworCQkJLyoKKwkJCSAqIEl0J3Mgbm90IHZhbGlkIHRvIGRyb3AgdGhlIG5vdC1u dWxsIGNvbnN0cmFpbnQgZm9yIGEgY29sdW1uIGluCisJCQkgKiB0aGUgcmVwbGljYSBpZGVudGl0 eSBpbmRleCwgZWl0aGVyLiAoRlVMTCBpcyBub3QgYWZmZWN0ZWQuKQorCQkJICovCisJCQlpZiAo Ym1zX2lzX21lbWJlcihsZmlyc3RfaW50KGxjKSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXIsIGlyY29scykpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1RBQkxFX0RFRklOSVRJT04pLAorCQkJCQkJZXJybXNnKCJjb2x1bW4gXCIl c1wiIGlzIGluIGluZGV4IHVzZWQgYXMgcmVwbGljYSBpZGVudGl0eSIsCisJCQkJCQkJICAgZ2V0 X2F0dG5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBsZmlyc3RfaW50KGxjKSwgZmFsc2UpKSk7 CisKKwkJCS8qIFJlc2V0IGF0dG5vdG51bGwgKi8KKwkJCWlmIChhdHRGb3JtLT5hdHRub3RudWxs KQorCQkJeworCQkJCWF0dEZvcm0tPmF0dG5vdG51bGwgPSBmYWxzZTsKKwkJCQlDYXRhbG9nVHVw bGVVcGRhdGUoYXR0cmVsLCAmYXR0dHVwLT50X3NlbGYsIGF0dHR1cCk7CisJCQl9CisJCX0KKwkJ dGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJdGFibGVfY2xvc2UoYXR0cmVs LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwl9CiAJLyogQ2xlYW4gdXAgKi8KIAlSZWxlYXNlU3lzQ2Fj aGUodHVwKTsKIAl0YWJsZV9jbG9zZShjb25EZXNjLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMjU5YjQyMzdhMi4uM2Y0MGY4MTYyMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQCB0eXBlZGVmIGVudW0gQWx0ZXJU YWJsZVBhc3MKIAlBVF9QQVNTX0FMVEVSX1RZUEUsCQkJLyogQUxURVIgQ09MVU1OIFRZUEUgKi8K IAlBVF9QQVNTX0FERF9DT0wsCQkJLyogQUREIENPTFVNTiAqLwogCUFUX1BBU1NfU0VUX0VYUFJF U1NJT04sCQkvKiBBTFRFUiBTRVQgRVhQUkVTU0lPTiAqLworCUFUX1BBU1NfT0xEX0NPTF9BVFRS UywJCS8qIHJlLXNldCBjb2x1bW4gTk9UIE5VTEwgKi8KIAlBVF9QQVNTX09MRF9JTkRFWCwJCQkv KiByZS1hZGQgZXhpc3RpbmcgaW5kZXhlcyAqLwogCUFUX1BBU1NfT0xEX0NPTlNUUiwJCQkvKiBy ZS1hZGQgZXhpc3RpbmcgY29uc3RyYWludHMgKi8KIAkvKiBXZSBjb3VsZCBzdXBwb3J0IGEgUkVO QU1FIENPTFVNTiBwYXNzIGhlcmUsIGJ1dCBub3QgY3VycmVudGx5IHVzZWQgKi8KQEAgLTE0NjI5 LDEyICsxNDYzMCwxMiBAQCBBVFBvc3RBbHRlclR5cGVQYXJzZShPaWQgb2xkSWQsIE9pZCBvbGRS ZWxJZCwgT2lkIHJlZlJlbElkLCBjaGFyICpjbWQsCiAJCQkJZWxzZSBpZiAoY21kLT5zdWJ0eXBl ID09IEFUX1NldEF0dE5vdE51bGwpCiAJCQkJewogCQkJCQkvKgotCQkJCQkgKiBUaGUgcGFyc2Vy IHdpbGwgY3JlYXRlIEFUX0F0dFNldE5vdE51bGwgc3ViY29tbWFuZHMgZm9yCi0JCQkJCSAqIGNv bHVtbnMgb2YgUFJJTUFSWSBLRVkgaW5kZXhlcy9jb25zdHJhaW50cywgYnV0IHdlIG5lZWQKLQkJ CQkJICogbm90IGRvIGFueXRoaW5nIHdpdGggdGhlbSBoZXJlLCBiZWNhdXNlIHRoZSBjb2x1bW5z JwotCQkJCQkgKiBOT1QgTlVMTCBtYXJrcyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHByb3BhZ2F0 ZWQgaW50bwotCQkJCQkgKiB0aGUgbmV3IHRhYmxlIGRlZmluaXRpb24uCisJCQkJCSAqIFBLIGRy b3Agbm93IHdpbGwgcmVzZXQgcGdfYXR0cmlidXRlIGF0dG5vdG51bGwgdG8gZmFsc2UuCisJCQkJ CSAqIFdlIHNob3VsZCBzZXQgYXR0bm90bnVsbCB0byB0cnVlIGFnYWluLgogCQkJCQkgKi8KKwkJ CQkJY21kLT5zdWJ0eXBlID0gQVRfU2V0QXR0Tm90TnVsbDsKKwkJCQkJdGFiLT5zdWJjbWRzW0FU X1BBU1NfT0xEX0NPTF9BVFRSU10gPQorCQkJCQkJbGFwcGVuZCh0YWItPnN1YmNtZHNbQVRfUEFT U19PTERfQ09MX0FUVFJTXSwgY21kKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBzdGF0ZW1lbnQgc3VidHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NvbnN0cmFpbnRzLm91dAppbmRleCBkOWQ4NDA4ZTg2Li4wMGZhYjU2YmY4IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dApAQCAtODY3LDYgKzg2Nywx MiBAQCBzZWxlY3QgY29ubmFtZSwgY29udHlwZSwgY29ua2V5IGZyb20gcGdfY29uc3RyYWludCB3 aGVyZSBjb25yZWxpZCA9ICdub3RudWxsX3RibAogKDEgcm93KQogCiBEUk9QIFRBQkxFIG5vdG51 bGxfdGJsMTsKKy0tIE5PVCBOVUxMIG1hc2sgc2hvdWxkIGJlIHJlc2V0IHdoZW4gZHJvcCBQSwor Q1JFQVRFIFRBQkxFIG5vdG51bGxfdDEoYzAgaW50LCBjMSBpbnQpOworQUxURVIgVEFCTEUgIG5v dG51bGxfdDEgQUREIENPTlNUUkFJTlQgUSBQUklNQVJZIEtFWShjMCwgYzEpOworQUxURVIgVEFC TEUgIG5vdG51bGxfdDEgRFJPUCBjMTsKK0FMVEVSIFRBQkxFICBub3RudWxsX3QxICBBTFRFUiBj MCBEUk9QIE5PVCBOVUxMOworRFJPUCBUQUJMRSBub3RudWxsX3QxOwogLS0gbm9wZQogQ1JFQVRF IFRBQkxFIG5vdG51bGxfdGJsMiAoYSBJTlRFR0VSIENPTlNUUkFJTlQgYmxhaCBOT1QgTlVMTCwg YiBJTlRFR0VSIENPTlNUUkFJTlQgYmxhaCBOT1QgTlVMTCk7CiBFUlJPUjogIGNvbnN0cmFpbnQg ImJsYWgiIGZvciByZWxhdGlvbiAibm90bnVsbF90YmwyIiBhbHJlYWR5IGV4aXN0cwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29uc3RyYWludHMuc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29uc3RyYWludHMuc3FsCmluZGV4IDg3ZDY4NWFlMzkuLmExNDZiNjc0MTYgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwKQEAgLTU5OSw2ICs1OTksMTMgQEAgQUxU RVIgVEFCTEUgbm90bnVsbF90YmwxIEFERCBDT05TVFJBSU5UIGZvb2JhciBOT1QgTlVMTCBhOwog c2VsZWN0IGNvbm5hbWUsIGNvbnR5cGUsIGNvbmtleSBmcm9tIHBnX2NvbnN0cmFpbnQgd2hlcmUg Y29ucmVsaWQgPSAnbm90bnVsbF90YmwxJzo6cmVnY2xhc3M7CiBEUk9QIFRBQkxFIG5vdG51bGxf dGJsMTsKIAorLS0gTk9UIE5VTEwgbWFzayBzaG91bGQgYmUgcmVzZXQgd2hlbiBkcm9wIFBLCitD UkVBVEUgVEFCTEUgbm90bnVsbF90MShjMCBpbnQsIGMxIGludCk7CitBTFRFUiBUQUJMRSAgbm90 bnVsbF90MSBBREQgQ09OU1RSQUlOVCBRIFBSSU1BUlkgS0VZKGMwLCBjMSk7CitBTFRFUiBUQUJM RSAgbm90bnVsbF90MSBEUk9QIGMxOworQUxURVIgVEFCTEUgIG5vdG51bGxfdDEgIEFMVEVSIGMw IERST1AgTk9UIE5VTEw7CitEUk9QIFRBQkxFIG5vdG51bGxfdDE7CisKIC0tIG5vcGUKIENSRUFU RSBUQUJMRSBub3RudWxsX3RibDIgKGEgSU5URUdFUiBDT05TVFJBSU5UIGJsYWggTk9UIE5VTEws IGIgSU5URUdFUiBDT05TVFJBSU5UIGJsYWggTk9UIE5VTEwpOwogCi0tIAoyLjI1LjEKCg== --000000000000cde9bc0614a53039--