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 1sFTGA-002bBe-6T for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Jun 2024 06:39:35 +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 1sFTG8-0090BG-BP for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Jun 2024 06:39:33 +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 1sFTG7-0090B8-VF for pgsql-hackers@lists.postgresql.org; Fri, 07 Jun 2024 06:39:32 +0000 Received: from mail-ua1-x92c.google.com ([2607:f8b0:4864:20::92c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sFTG5-000Ppr-E4 for pgsql-hackers@lists.postgresql.org; Fri, 07 Jun 2024 06:39:31 +0000 Received: by mail-ua1-x92c.google.com with SMTP id a1e0cc1a2514c-80ad976d6a2so439324241.1 for ; Thu, 06 Jun 2024 23:39:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717742367; x=1718347167; 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=6MF62oIC/gf12QIatORB8W6NJLJvuD7EoSAs2XaSQkg=; b=gFLGq5vvJ8g22+UJgKPaoJxi83OTIJ6KiZ3bgXVCgaezVm9tZbG8ypzY70RGwFwSrh 8g4wvnz/0L+/72OksD/v3c8qGvcvhXhgRdcH5Kqu6oNmKnndz1GFKLxGsC4Qa5pjGy8E msG7AnktgkjVD1st5GnuaN4qicBzPoHyG5JDNNLzovlwVRL4B40QHBZlE3CrWBscWhJ9 EKQf6dMIY+n5K2+R/KoctWY+KtuJt9L4gmYB23O6msHEgm7wq+CULieQD6qz+iXwQfis CTswcSTg9VCUzZhiiSpfqARS5jKpK0LUHmE6QTWfr+5uneAOXSr1pvRwWJnAyZiHHBDU mdBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717742367; x=1718347167; 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=6MF62oIC/gf12QIatORB8W6NJLJvuD7EoSAs2XaSQkg=; b=M9NDd6yQC6PdleDCdE4FVW+H97eLBUTRCsI74bdTH99PDiMOr32eUxEpYiA6VL0L62 yaOmbo9PZb2obqo1+JCp+DWJEhYMgMLyttUP0hF4HZe+hBJtsp97JHwhoziQWIj2CFGs BWV8Ir0mrdWFkf+39EJASV6rcjZcIkt9EwmItg35fD0ZcTdWsYl9WE3NU6JQV7NWI9zM rYImFE7Fez9KbAEkqDs8Md4uF2VAVwLDdFhxcqKFut3keBdhWhd6A7+ObuK3GxyMsLf8 y8H4kPZXh3PX3iyqF+AB3XoMHjQjtAU2XYxnhDTykhlX3/k76Jeo2kzJQNoTrapXjTXa 468w== X-Gm-Message-State: AOJu0YyIW1RextKnhZ6b3SEtiXxlm/G+Fwx61Yr0xLrz957PudaccgWb d774eTwYUAFNf2Xo0y1jClxOnO+DHlS0d+Oa9P1ISCX5UVpqJv6ogFFMFk6HJu9QXYjoSCN9QcT kNz3Pud2M+BaV+BPpyIKPXAfkvm0= X-Google-Smtp-Source: AGHT+IET3q3DUaO6LRv+D8RevO588HhoKyA8rQ6TIheFRZhaDyQ6fEcMn/ea8Rx+mJ8ma22m6Zw0ta6H4wDBbuFZNys= X-Received: by 2002:a05:6102:410:b0:485:d96e:d18a with SMTP id ada2fe7eead31-48c2770dbb7mr1293009137.29.1717742367529; Thu, 06 Jun 2024 23:39:27 -0700 (PDT) MIME-Version: 1.0 References: <78d824e0-b21e-480d-a252-e4b84bc2c24b@illuminatedcomputing.com> <69f0a887-a4ed-49cf-9d63-923891006658@illuminatedcomputing.com> In-Reply-To: From: jian he Date: Fri, 7 Jun 2024 14:39:15 +0800 Message-ID: Subject: Re: altering a column's collation leaves an invalid foreign key To: Paul Jungwirth Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000a1fb93061a470f0e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a1fb93061a470f0e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Apr 13, 2024 at 9:13=E2=80=AFPM jian he wrote: > > > > > Here is a patch implementing this. It was a bit more fuss than I ex= pected, so maybe someone has a > > > > better way. > I think I found a simple way. > > the logic is: > * ATExecAlterColumnType changes one column once at a time. > * one column can only have one collation. so we don't need to store a > list of collation oid. > * ATExecAlterColumnType we can get the new collation (targetcollid) > and original collation info. > * RememberAllDependentForRebuilding will check the column dependent, > whether this column is referenced by a foreign key or not information > is recorded. > so AlteredTableInfo->changedConstraintOids have the primary key and > foreign key oids. > * ATRewriteCatalogs will call ATPostAlterTypeCleanup (see the comments > in ATRewriteCatalogs) > * for tab->changedConstraintOids (foreign key, primary key) will call > ATPostAlterTypeParse, so > for foreign key (con->contype =3D=3D CONSTR_FOREIGN) will call TryReuseF= oreignKey. > * in TryReuseForeignKey, we can pass the information that our primary > key old collation is nondeterministic > and old collation !=3D new collation to the foreign key constraint. > so foreign key can act accordingly at ATAddForeignKeyConstraint (old_chec= k_ok). > > > based on the above logic, I add one bool in struct AlteredTableInfo, > one bool in struct Constraint. > bool in AlteredTableInfo is for storing it, later passing it to struct > Constraint. > we need bool in Constraint because ATAddForeignKeyConstraint needs it. I refactored the comments. also added some extra tests hoping to make it more bullet proof, maybe it's redundant. --000000000000a1fb93061a470f0e Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Revalidate-PK-FK-ties-when-PK-collation-is-change.patch" Content-Disposition: attachment; filename="v4-0001-Revalidate-PK-FK-ties-when-PK-collation-is-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx4bf4j50 RnJvbSA5YTJlNzMyMzFlMDM3Yzc1NTU0NDlkODc5MDg4NWMxZmViNGYzZWQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgNyBKdW4gMjAyNCAxNDozMjo1NSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MS8xXSBSZXZhbGlkYXRlIFBLLUZLIHRpZXMgd2hlbiBQSyBjb2xsYXRpb24gaXMgY2hhbmdlZAoK V2l0aCBkZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMsIHdlIGNoZWNrIHRoZSBQSy1GSyB0aWVzIGJ5 IGxvb2tpbmcgYXQgYmluYXJ5CmVxdWFsaXR5LiBCdXQgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRp b24gY2FuIGFsbG93IG5vbi1pZGVudGljYWwgdmFsdWVzCnRvIGJlIGNvbnNpZGVyZWQgZXF1YWws IGUuZy4gJ2EnIGFuZCAnQScgd2hlbiBjYXNlLWluc2Vuc2l0aXZlLgpBTFRFUiBDT0xVTU4gLi4g U0VUIERBVEEgVFlQRSBtYWtlCnNvbWUgcmVmZXJlbmNlcyB0aGF0IHVzZWQgdG8gYmUgdmFsaWQg bWF5IG5vdCBiZSBhbnltb3JlLgoKZm9yIGBBTFRFUiBDT0xVTU4gLi4gU0VUIERBVEEgVFlQRWA6 CklmIHRoZSBjaGFuZ2VkIGtleSBjb2x1bW4gaXMgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXkgY29s dW1ucywKdGhlbiB1bmRlciB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgd2UgbmVlZCB0byByZXZh bGlkYXRlIHRoZSBQSy1GSyB0aWVzCiogdGhlIFBLIG5ldyBjb2xsYXRpb24gaXMgZGlmZmVyZW50 IGZyb20gdGhlIG9sZAoqIHRoZSBvbGQgY29sbGF0aW9uIGlzIG5vbmRldGVybWluaXN0aWMuCgp3 ZSBuZWVkIHRvIHJldmFsaWRhdGUgdGhlIFBLLUZLIHRpZXMuCmRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vNzhkODI0ZTAtYjIxZS00ODBkLWEyNTItZTRiODRiYzJjMjRiJTQwaWxsdW1p bmF0ZWRjb21wdXRpbmcuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMg ICAgICAgICAgICAgIHwgNjEgKysrKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwgIDMgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVk L2NvbGxhdGUuaWN1LnV0Zjgub3V0ICAgICB8IDE4ICsrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvY29sbGF0ZS5pY3UudXRmOC5zcWwgICAgIHwgMTYgKysrKysKIDQgZmlsZXMgY2hhbmdlZCwg ODUgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwppbmRleCA3YjZjNjliNy4uNzczMzdiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBA IC0xOTksNiArMTk5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJlZFRhYmxlSW5mbwogCS8qIE9i amVjdHMgdG8gcmVidWlsZCBhZnRlciBjb21wbGV0aW5nIEFMVEVSIFRZUEUgb3BlcmF0aW9ucyAq LwogCUxpc3QJICAgKmNoYW5nZWRDb25zdHJhaW50T2lkczsJLyogT0lEcyBvZiBjb25zdHJhaW50 cyB0byByZWJ1aWxkICovCiAJTGlzdAkgICAqY2hhbmdlZENvbnN0cmFpbnREZWZzOwkvKiBzdHJp bmcgZGVmaW5pdGlvbnMgb2Ygc2FtZSAqLworCWJvb2wJCXZlcmlmeV9uZXdfY29sbGF0aW9uOyAv KiBUIGlmIHdlIG5lZWQgcmVjaGVjayB0aGUgbmV3IGNvbGxhdGlvbiAqLwogCUxpc3QJICAgKmNo YW5nZWRJbmRleE9pZHM7CS8qIE9JRHMgb2YgaW5kZXhlcyB0byByZWJ1aWxkICovCiAJTGlzdAkg ICAqY2hhbmdlZEluZGV4RGVmczsJLyogc3RyaW5nIGRlZmluaXRpb25zIG9mIHNhbWUgKi8KIAlj aGFyCSAgICpyZXBsaWNhSWRlbnRpdHlJbmRleDsJLyogaW5kZXggdG8gcmVzZXQgYXMgUkVQTElD QSBJREVOVElUWSAqLwpAQCAtNTcyLDEyICs1NzMsMTMgQEAgc3RhdGljIHZvaWQgQVRQb3N0QWx0 ZXJUeXBlQ2xlYW51cChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCQkJ CQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKTsKIHN0YXRpYyB2b2lkIEFUUG9zdEFsdGVyVHlwZVBh cnNlKE9pZCBvbGRJZCwgT2lkIG9sZFJlbElkLCBPaWQgcmVmUmVsSWQsCiAJCQkJCQkJCSBjaGFy ICpjbWQsIExpc3QgKip3cXVldWUsIExPQ0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJCQkgYm9vbCBy ZXdyaXRlKTsKKwkJCQkJCQkJIGJvb2wgcmV3cml0ZSwKKwkJCQkJCQkJIGJvb2wgdmVyaWZ5X25l d19jb2xsYXRpb24pOwogc3RhdGljIHZvaWQgUmVidWlsZENvbnN0cmFpbnRDb21tZW50KEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwgQWx0ZXJUYWJsZVBhc3MgcGFzcywKIAkJCQkJCQkJCSBPaWQgb2Jq aWQsIFJlbGF0aW9uIHJlbCwgTGlzdCAqZG9tbmFtZSwKIAkJCQkJCQkJCSBjb25zdCBjaGFyICpj b25uYW1lKTsKIHN0YXRpYyB2b2lkIFRyeVJldXNlSW5kZXgoT2lkIG9sZElkLCBJbmRleFN0bXQg KnN0bXQpOwotc3RhdGljIHZvaWQgVHJ5UmV1c2VGb3JlaWduS2V5KE9pZCBvbGRJZCwgQ29uc3Ry YWludCAqY29uKTsKK3N0YXRpYyB2b2lkIFRyeVJldXNlRm9yZWlnbktleShPaWQgb2xkSWQsIENv bnN0cmFpbnQgKmNvbiwgYm9vbCB2ZXJpZnlfbmV3X2NvbGxhdGlvbik7CiBzdGF0aWMgT2JqZWN0 QWRkcmVzcyBBVEV4ZWNBbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zKFJlbGF0aW9uIHJlbCwgY29u c3QgY2hhciAqY29sTmFtZSwKIAkJCQkJCQkJCQkJCQkgTGlzdCAqb3B0aW9ucywgTE9DS01PREUg bG9ja21vZGUpOwogc3RhdGljIHZvaWQgY2hhbmdlX293bmVyX2ZpeF9jb2x1bW5fYWNscyhPaWQg cmVsYXRpb25PaWQsCkBAIC05ODU3LDYgKzk4NTksMTUgQEAgQVRBZGRGb3JlaWduS2V5Q29uc3Ry YWludChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwK IAkJCQkJCQkJCW9sZF9wZmVxb3BfaXRlbSk7CiAJCX0KIAkJaWYgKG9sZF9jaGVja19vaykKKwkJ eworCQkJLyoKKwkJCSAqIGNvbGxhdGlvbl9yZWNoZWNrIGlzIHRydWUgdGhlbiB3ZSBuZWVkIHRv CisJCQkgKiByZXZhbGlkYXRlIHRoZSBmb3JlaWduIGtleSBhbmQgcHJpbWFyeSBrZXkgdmFsdWUg dGllcy4KKwkJCSAqIHNlZSBhbHNvIFRyeVJldXNlRm9yZWlnbktleS4KKwkJCSovCisJCQlvbGRf Y2hlY2tfb2sgPSAhZmtjb25zdHJhaW50LT5jb2xsYXRpb25fcmVjaGVjazsKKwkJfQorCQlpZiAo b2xkX2NoZWNrX29rKQogCQl7CiAJCQlPaWQJCQlvbGRfZmt0eXBlOwogCQkJT2lkCQkJbmV3X2Zr dHlwZTsKQEAgLTk5MDIsMTAgKzk5MTMsNiBAQCBBVEFkZEZvcmVpZ25LZXlDb25zdHJhaW50KExp c3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCQkJICog dHVybiBjb25mb3JtIHRvIHRoZSBkb21haW4uICBDb25zZXF1ZW50bHksIHdlIG5lZWQgbm90IHRy ZWF0CiAJCQkgKiBkb21haW5zIHNwZWNpYWxseSBoZXJlLgogCQkJICoKLQkJCSAqIFNpbmNlIHdl IHJlcXVpcmUgdGhhdCBhbGwgY29sbGF0aW9ucyBzaGFyZSB0aGUgc2FtZSBub3Rpb24gb2YKLQkJ CSAqIGVxdWFsaXR5ICh3aGljaCB0aGV5IGRvLCBiZWNhdXNlIHRleHRlcSByZWR1Y2VzIHRvIGJp dHdpc2UKLQkJCSAqIGVxdWFsaXR5KSwgd2UgZG9uJ3QgY29tcGFyZSBjb2xsYXRpb24gaGVyZS4K LQkJCSAqCiAJCQkgKiBXZSBuZWVkIG5vdCBkaXJlY3RseSBjb25zaWRlciB0aGUgUEsgdHlwZS4g IEl0J3MgbmVjZXNzYXJpbHkKIAkJCSAqIGJpbmFyeSBjb2VyY2libGUgdG8gdGhlIG9wY2ludHlw ZSBvZiB0aGUgdW5pcXVlIGluZGV4IGNvbHVtbiwKIAkJCSAqIGFuZCByaV90cmlnZ2Vycy5jIHdp bGwgb25seSBkZWFsIHdpdGggUEsgZGF0dW1zIGluIHRlcm1zIG9mCkBAIC0xMzAzNSw2ICsxMzA0 MiwyOSBAQCBBVEV4ZWNBbHRlckNvbHVtblR5cGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxh dGlvbiByZWwsCiAJLyogQW5kIHRoZSBjb2xsYXRpb24gKi8KIAl0YXJnZXRjb2xsaWQgPSBHZXRD b2x1bW5EZWZDb2xsYXRpb24oTlVMTCwgZGVmLCB0YXJnZXR0eXBlKTsKIAorCWlmIChPaWRJc1Zh bGlkKHRhcmdldGNvbGxpZCkpCisJeworCQlPaWQJCQl0eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsK KwkJT2lkCQkJc291cmNlX2NvbGxpZDsKKworCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoUmVsYXRp b25HZXRSZWxpZCh0YWItPnJlbCksIGF0dG51bSwKKwkJCQkJCQkmdHlwaWQsICZ0eXBtb2QsICZz b3VyY2VfY29sbGlkKTsKKwkJLyoKKwkJKiBBbGwgZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIHVz ZSBiaXR3aXNlIGVxdWFsaXR5IHRvIHJlc29sdmUKKwkJKiBQSy1GSyB0aWVzLiBCdXQgaWYgdGhl IHByaW1hcnkga2V5IChzb3VyY2UpIGNvbGxhdGlvbiB3YXMgaW5kZXRlcm1pbmlzdGljLAorCQkq IGFuZCBBTFRFUiBDT0xVTU4gLi4gU0VUIERBVEEgVFlQRSBjaGFuZ2VzIHRoZSBwcmltYXJ5IGtl eSBjb2xsYXRpb24sIHRoZW4KKwkJKiB3ZSBtdXN0IHJlLWNoZWNrIHRoZSBQSy1GSyB0aWVzLCBi ZWNhdXNlIHNvbWUgcmVmZXJlbmNlcworCQkqIHRoYXQgdXNlZCB0byBiZSAiZXF1YWwiIG1heSBu b3QgYmUgYW55bW9yZS4KKwkJKiBXZSBhZGQgYSBmbGFnIGluIEFsdGVyZWRUYWJsZUluZm8gdG8g c2lnbmlmeQorCQkqIHRoYXQgd2UgbmVlZCB0byB2ZXJpZnkgdGhlIG5ldyBjb2xsYXRpb24gZm9y IFBLLUZLIHRpZXMuCisJCSogc2VlIEFUQWRkRm9yZWlnbktleUNvbnN0cmFpbnQgYWxzby4KKwkJ Ki8KKwkJaWYgKE9pZElzVmFsaWQoc291cmNlX2NvbGxpZCkgJiYKKwkJCQkhZ2V0X2NvbGxhdGlv bl9pc2RldGVybWluaXN0aWMoc291cmNlX2NvbGxpZCkgJiYKKwkJCQkodGFyZ2V0Y29sbGlkICE9 IHNvdXJjZV9jb2xsaWQpKQorCQkJdGFiLT52ZXJpZnlfbmV3X2NvbGxhdGlvbiA9IHRydWU7CisJ fQogCS8qCiAJICogSWYgdGhlcmUgaXMgYSBkZWZhdWx0IGV4cHJlc3Npb24gZm9yIHRoZSBjb2x1 bW4sIGdldCBpdCBhbmQgZW5zdXJlIHdlCiAJICogY2FuIGNvZXJjZSBpdCB0byB0aGUgbmV3IGRh dGF0eXBlLiAgKFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgY2hhbmdpbmcKQEAgLTEzNzQyLDcgKzEz NzcyLDggQEAgQVRQb3N0QWx0ZXJUeXBlQ2xlYW51cChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFi bGVJbmZvICp0YWIsIExPQ0tNT0RFIGxvY2ttb2RlKQogCiAJCUFUUG9zdEFsdGVyVHlwZVBhcnNl KG9sZElkLCByZWxpZCwgY29uZnJlbGlkLAogCQkJCQkJCSAoY2hhciAqKSBsZmlyc3QoZGVmX2l0 ZW0pLAotCQkJCQkJCSB3cXVldWUsIGxvY2ttb2RlLCB0YWItPnJld3JpdGUpOworCQkJCQkJCSB3 cXVldWUsIGxvY2ttb2RlLCB0YWItPnJld3JpdGUsCisJCQkJCQkJIHRhYi0+dmVyaWZ5X25ld19j b2xsYXRpb24pOwogCX0KIAlmb3Jib3RoKG9pZF9pdGVtLCB0YWItPmNoYW5nZWRJbmRleE9pZHMs CiAJCQlkZWZfaXRlbSwgdGFiLT5jaGFuZ2VkSW5kZXhEZWZzKQpAQCAtMTM3NTMsNyArMTM3ODQs OCBAQCBBVFBvc3RBbHRlclR5cGVDbGVhbnVwKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwgTE9DS01PREUgbG9ja21vZGUpCiAJCXJlbGlkID0gSW5kZXhHZXRSZWxhdGlvbihv bGRJZCwgZmFsc2UpOwogCQlBVFBvc3RBbHRlclR5cGVQYXJzZShvbGRJZCwgcmVsaWQsIEludmFs aWRPaWQsCiAJCQkJCQkJIChjaGFyICopIGxmaXJzdChkZWZfaXRlbSksCi0JCQkJCQkJIHdxdWV1 ZSwgbG9ja21vZGUsIHRhYi0+cmV3cml0ZSk7CisJCQkJCQkJIHdxdWV1ZSwgbG9ja21vZGUsIHRh Yi0+cmV3cml0ZSwKKwkJCQkJCQkgdGFiLT52ZXJpZnlfbmV3X2NvbGxhdGlvbik7CiAKIAkJT2Jq ZWN0QWRkcmVzc1NldChvYmosIFJlbGF0aW9uUmVsYXRpb25JZCwgb2xkSWQpOwogCQlhZGRfZXhh Y3Rfb2JqZWN0X2FkZHJlc3MoJm9iaiwgb2JqZWN0cyk7CkBAIC0xMzc2OSw3ICsxMzgwMSw4IEBA IEFUUG9zdEFsdGVyVHlwZUNsZWFudXAoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAq dGFiLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAkJcmVsaWQgPSBTdGF0aXN0aWNzR2V0UmVsYXRpb24o b2xkSWQsIGZhbHNlKTsKIAkJQVRQb3N0QWx0ZXJUeXBlUGFyc2Uob2xkSWQsIHJlbGlkLCBJbnZh bGlkT2lkLAogCQkJCQkJCSAoY2hhciAqKSBsZmlyc3QoZGVmX2l0ZW0pLAotCQkJCQkJCSB3cXVl dWUsIGxvY2ttb2RlLCB0YWItPnJld3JpdGUpOworCQkJCQkJCSB3cXVldWUsIGxvY2ttb2RlLCB0 YWItPnJld3JpdGUsCisJCQkJCQkJIHRhYi0+dmVyaWZ5X25ld19jb2xsYXRpb24pOwogCiAJCU9i amVjdEFkZHJlc3NTZXQob2JqLCBTdGF0aXN0aWNFeHRSZWxhdGlvbklkLCBvbGRJZCk7CiAJCWFk ZF9leGFjdF9vYmplY3RfYWRkcmVzcygmb2JqLCBvYmplY3RzKTsKQEAgLTEzODMyLDcgKzEzODY1 LDggQEAgQVRQb3N0QWx0ZXJUeXBlQ2xlYW51cChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJ bmZvICp0YWIsIExPQ0tNT0RFIGxvY2ttb2RlKQogICovCiBzdGF0aWMgdm9pZAogQVRQb3N0QWx0 ZXJUeXBlUGFyc2UoT2lkIG9sZElkLCBPaWQgb2xkUmVsSWQsIE9pZCByZWZSZWxJZCwgY2hhciAq Y21kLAotCQkJCQkgTGlzdCAqKndxdWV1ZSwgTE9DS01PREUgbG9ja21vZGUsIGJvb2wgcmV3cml0 ZSkKKwkJCQkJIExpc3QgKip3cXVldWUsIExPQ0tNT0RFIGxvY2ttb2RlLCBib29sIHJld3JpdGUs CisJCQkJCSBib29sIHZlcmlmeV9uZXdfY29sbGF0aW9uKQogewogCUxpc3QJICAgKnJhd19wYXJz ZXRyZWVfbGlzdDsKIAlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdDsKQEAgLTEzOTU5LDcgKzEzOTkz LDcgQEAgQVRQb3N0QWx0ZXJUeXBlUGFyc2UoT2lkIG9sZElkLCBPaWQgb2xkUmVsSWQsIE9pZCBy ZWZSZWxJZCwgY2hhciAqY21kLAogCQkJCQkvKiByZXdyaXRpbmcgbmVpdGhlciBzaWRlIG9mIGEg RksgKi8KIAkJCQkJaWYgKGNvbi0+Y29udHlwZSA9PSBDT05TVFJfRk9SRUlHTiAmJgogCQkJCQkJ IXJld3JpdGUgJiYgdGFiLT5yZXdyaXRlID09IDApCi0JCQkJCQlUcnlSZXVzZUZvcmVpZ25LZXko b2xkSWQsIGNvbik7CisJCQkJCQlUcnlSZXVzZUZvcmVpZ25LZXkob2xkSWQsIGNvbiwgdmVyaWZ5 X25ld19jb2xsYXRpb24pOwogCQkJCQljb24tPnJlc2V0X2RlZmF1bHRfdGJsc3BjID0gdHJ1ZTsK IAkJCQkJY21kLT5zdWJ0eXBlID0gQVRfUmVBZGRDb25zdHJhaW50OwogCQkJCQl0YWItPnN1YmNt ZHNbQVRfUEFTU19PTERfQ09OU1RSXSA9CkBAIC0xNDExOSw3ICsxNDE1Myw3IEBAIFRyeVJldXNl SW5kZXgoT2lkIG9sZElkLCBJbmRleFN0bXQgKnN0bXQpCiAgKiB0aGlzIGNvbnN0cmFpbnQgY2Fu IGJlIHNraXBwZWQuCiAgKi8KIHN0YXRpYyB2b2lkCi1UcnlSZXVzZUZvcmVpZ25LZXkoT2lkIG9s ZElkLCBDb25zdHJhaW50ICpjb24pCitUcnlSZXVzZUZvcmVpZ25LZXkoT2lkIG9sZElkLCBDb25z dHJhaW50ICpjb24sIGJvb2wgdmVyaWZ5X25ld19jb2xsYXRpb24pCiB7CiAJSGVhcFR1cGxlCXR1 cDsKIAlEYXR1bQkJYWRhdHVtOwpAQCAtMTQxNTEsNiArMTQxODUsOSBAQCBUcnlSZXVzZUZvcmVp Z25LZXkoT2lkIG9sZElkLCBDb25zdHJhaW50ICpjb24pCiAJCWNvbi0+b2xkX2NvbnBmZXFvcCA9 IGxhcHBlbmRfb2lkKGNvbi0+b2xkX2NvbnBmZXFvcCwgcmF3YXJyW2ldKTsKIAogCVJlbGVhc2VT eXNDYWNoZSh0dXApOworCisJLyogdmVyaWZ5X25ld19jb2xsYXRpb24gaXMgY29tcHV0ZWQgYXQg QVRFeGVjQWx0ZXJDb2x1bW5UeXBlICovCisJY29uLT5jb2xsYXRpb25fcmVjaGVjayA9IHZlcmlm eV9uZXdfY29sbGF0aW9uOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGRkZmVk MDJkLi4yOWI0ODRmNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjc3Myw3ICsyNzczLDgg QEAgdHlwZWRlZiBzdHJ1Y3QgQ29uc3RyYWludAogCUxpc3QJICAgKm9sZF9jb25wZmVxb3A7CS8q IHBnX2NvbnN0cmFpbnQuY29ucGZlcW9wIG9mIG15IGZvcm1lciBzZWxmICovCiAJT2lkCQkJb2xk X3BrdGFibGVfb2lkOwkvKiBwZ19jb25zdHJhaW50LmNvbmZyZWxpZCBvZiBteSBmb3JtZXIKIAkJ CQkJCQkJCSAqIHNlbGYgKi8KLQorCWJvb2wJCWNvbGxhdGlvbl9yZWNoZWNrOyAvKiBkb2VzIHBy aW1hcnkga2V5IGNvbHVtbnMgY29sbGF0aW9uIGNoYW5nZXMgbmVlZAorCQkJCQkJCQkJKiBmb3Jl aWduIGtleSBjb25zdHJhaW50IHJlY2hlY2sgKi8KIAlQYXJzZUxvYwlsb2NhdGlvbjsJCS8qIHRv a2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiB9IENvbnN0cmFpbnQ7CiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CmluZGV4IDdkNTlm YjQ0Li5lYTI4MDMxYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xs YXRlLmljdS51dGY4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUu aWN1LnV0Zjgub3V0CkBAIC0xOTMzLDYgKzE5MzMsMjQgQEAgU0VMRUNUICogRlJPTSB0ZXN0MTFm azsKIC0tLQogKDAgcm93cykKIAorLS0gVGVzdCBhbHRlcmluZyB0aGUgY29sbGF0aW9uIG9mIHRo ZSByZWZlcmVuY2VkIGNvbHVtbi4KK0NSRUFURSBDT0xMQVRJT04gaWdub3JlX2FjY2VudF9jYXNl IChwcm92aWRlciA9IGljdSwgZGV0ZXJtaW5pc3RpYyA9IGZhbHNlLCBsb2NhbGUgPSAndW5kLXUt a3MtbGV2ZWwxJyk7CitDUkVBVEUgVEFCTEUgcGt0YWJsZSAoeCB0ZXh0IENPTExBVEUgY2FzZV9p bnNlbnNpdGl2ZSBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZmt0YWJsZSAoeCB0ZXh0IFJF RkVSRU5DRVMgcGt0YWJsZSk7CitJTlNFUlQgSU5UTyBwa3RhYmxlIFZBTFVFUyAoJ2EnKTsKK0lO U0VSVCBJTlRPIGZrdGFibGUgVkFMVUVTICgnQScpOworLS0gc2hvdWxkIGZhaWw6CitBTFRFUiBU QUJMRSBwa3RhYmxlIEFMVEVSIENPTFVNTiB4IFRZUEUgdGV4dCBDT0xMQVRFICJDIjsKK0VSUk9S OiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZmt0YWJsZSIgdmlvbGF0ZXMgZm9yZWlnbiBr ZXkgY29uc3RyYWludCAiZmt0YWJsZV94X2ZrZXkiCitERVRBSUw6ICBLZXkgKHgpPShBKSBpcyBu b3QgcHJlc2VudCBpbiB0YWJsZSAicGt0YWJsZSIuCistLSBzaG91bGQgZmFpbDoKK0FMVEVSIFRB QkxFIHBrdGFibGUgQUxURVIgQ09MVU1OIHggVFlQRSB0ZXh0IENPTExBVEUgaWdub3JlX2FjY2Vu dHM7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZrdGFibGUiIHZpb2xhdGVz IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZrdGFibGVfeF9ma2V5IgorREVUQUlMOiAgS2V5ICh4 KT0oQSkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgInBrdGFibGUiLgorLS0gc2hvdWxkIG9rOgor QUxURVIgVEFCTEUgcGt0YWJsZSBBTFRFUiBDT0xVTU4geCBUWVBFIHRleHQgQ09MTEFURSBjYXNl X2luc2Vuc2l0aXZlOworQUxURVIgVEFCTEUgcGt0YWJsZSBBTFRFUiBDT0xVTU4geCBUWVBFIHRl eHQgQ09MTEFURSBpZ25vcmVfYWNjZW50X2Nhc2U7CitEUk9QIFRBQkxFIGZrdGFibGUsIHBrdGFi bGU7CiAtLSBwYXJ0aXRpb25pbmcKIENSRUFURSBUQUJMRSB0ZXN0MjAgKGEgaW50LCBiIHRleHQg Q09MTEFURSBjYXNlX2luc2Vuc2l0aXZlKSBQQVJUSVRJT04gQlkgTElTVCAoYik7CiBDUkVBVEUg VEFCTEUgdGVzdDIwXzEgUEFSVElUSU9OIE9GIHRlc3QyMCBGT1IgVkFMVUVTIElOICgnYWJjJyk7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCmluZGV4IDgwZjI4YTk3 Li5kY2RiYmM0OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3Uu dXRmOC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwK QEAgLTcyMSw2ICs3MjEsMjIgQEAgREVMRVRFIEZST00gdGVzdDExcGsgV0hFUkUgeCA9ICdhYmMn OwogU0VMRUNUICogRlJPTSB0ZXN0MTFwazsKIFNFTEVDVCAqIEZST00gdGVzdDExZms7CiAKKy0t IFRlc3QgYWx0ZXJpbmcgdGhlIGNvbGxhdGlvbiBvZiB0aGUgcmVmZXJlbmNlZCBjb2x1bW4uCitD UkVBVEUgQ09MTEFUSU9OIGlnbm9yZV9hY2NlbnRfY2FzZSAocHJvdmlkZXIgPSBpY3UsIGRldGVy bWluaXN0aWMgPSBmYWxzZSwgbG9jYWxlID0gJ3VuZC11LWtzLWxldmVsMScpOworQ1JFQVRFIFRB QkxFIHBrdGFibGUgKHggdGV4dCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUgUFJJTUFSWSBLRVkp OworQ1JFQVRFIFRBQkxFIGZrdGFibGUgKHggdGV4dCBSRUZFUkVOQ0VTIHBrdGFibGUpOworSU5T RVJUIElOVE8gcGt0YWJsZSBWQUxVRVMgKCdhJyk7CitJTlNFUlQgSU5UTyBma3RhYmxlIFZBTFVF UyAoJ0EnKTsKKy0tIHNob3VsZCBmYWlsOgorQUxURVIgVEFCTEUgcGt0YWJsZSBBTFRFUiBDT0xV TU4geCBUWVBFIHRleHQgQ09MTEFURSAiQyI7CisKKy0tIHNob3VsZCBmYWlsOgorQUxURVIgVEFC TEUgcGt0YWJsZSBBTFRFUiBDT0xVTU4geCBUWVBFIHRleHQgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKKworLS0gc2hvdWxkIG9rOgorQUxURVIgVEFCTEUgcGt0YWJsZSBBTFRFUiBDT0xVTU4geCBU WVBFIHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlOworQUxURVIgVEFCTEUgcGt0YWJsZSBB TFRFUiBDT0xVTU4geCBUWVBFIHRleHQgQ09MTEFURSBpZ25vcmVfYWNjZW50X2Nhc2U7CitEUk9Q IFRBQkxFIGZrdGFibGUsIHBrdGFibGU7CiAtLSBwYXJ0aXRpb25pbmcKIENSRUFURSBUQUJMRSB0 ZXN0MjAgKGEgaW50LCBiIHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlKSBQQVJUSVRJT04g QlkgTElTVCAoYik7CiBDUkVBVEUgVEFCTEUgdGVzdDIwXzEgUEFSVElUSU9OIE9GIHRlc3QyMCBG T1IgVkFMVUVTIElOICgnYWJjJyk7Ci0tIAoyLjM0LjEKCg== --000000000000a1fb93061a470f0e--