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 1wB7Xe-000kxU-0S for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 08:48:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wB7Xc-00AkTD-1k for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 08:48:41 +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.96) (envelope-from ) id 1wB7Xc-00AkT5-0j for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 08:48:41 +0000 Received: from mail-ot1-x32e.google.com ([2607:f8b0:4864:20::32e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wB7Xb-00000000K8s-0eXe for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 08:48:40 +0000 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7dbff06e4a6so1720293a34.1 for ; Fri, 10 Apr 2026 01:48:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775810917; cv=none; d=google.com; s=arc-20240605; b=Gq8KUsMPJrWgozIrPpQdZU2lIT/Q3u/26yf9gNFg80Nifqy0wSuaIdE79QSGR70E1m UhS+dPHaWF9+p/tm7E2rMmCrMx1YYSt7UaOVNbSn2UlGkHZVhkdOGwJF++uIjSYTw57u H6XUEZG5J7vL0PA9+qTqGIaJA+JjcUIlXbW+7DiwjZN7GAlANnbIuSJNGn/S12wUs4hw SDjliFfWkNg3Hzja2HmqdHxCILrsp5DatKld/O54LwK0qRscM/hnQXQgsgfc8cnrLPnM UjXB113YF0Jh2ZRUgbxnutcQa7nC/ofBZ83hY/gO88eg6is5HkTqCD5Q3Qhxi+JAsX9J v+Qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=JV6rcUCT3b6scy/wX+I6FjZ/QCG7z7QbNygugPtWuvs=; fh=pmBMntjmyx6XYOkmIq7jCPL8+6Ex8nEv6KGKxj4+8uc=; b=SIpvG+uz9mIZtQGhWiPiVLU53eYzGBKDOP3TMPoU0xvX4RWl+/ZECTbGIdPvn4t6ZG SLw0NtvulGlkMJSTxfrTJ/gG+IMQFlz/5NfoNux+vvUNEDLc+krtvrK7ByVM7VXnfW6Y oDxkD+ebIaK+OVKED0O8E75TMzcuWLG2Jy7IQOkjdafF8EzO27avx+cRoV4sxUK4ioAt mX/DN9G4HxA4ZNPQ+JoyUwHqnuNd3BItwgSvyKz9XsAUbSr13RTFsgBj3LufIjqPoUck qSbr6jvxOZIwsExaGqblFev5x7pbXRWIivoIp4EjUQCwYzW70R+uiXPpqF7MyQ9sV/BX 3Bag==; 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=20251104; t=1775810917; x=1776415717; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=JV6rcUCT3b6scy/wX+I6FjZ/QCG7z7QbNygugPtWuvs=; b=nMc+/mYjfEUe3teS0H5A6C/5DhNrOEf8FeC8dSshIN85xwCXAYpmv3tJXbmzT3ilXt VrutNJ6WNjZd+qyF8+VM4RGY3Vc95VPB2XWcTznItJVxFqoav0ggg39hpyX/E1wdglOB G2EAd6Ujy6z9iepf0BY9WOWUMRe9RGtY5HQh77tkXQJ9B2M2jjnAN42eGPsmxjwc5zcj UVzCyBW99/PoELULKe5cgLN4vEaYoZ8WQZj0c97FlcPslXTDzn1ujf0/X0Sf20Wc9GMw iLplZQpSnRQN6W5X9360XQ31xrB5kwNTnSWwJDkGPsHEoW6hU8B0Z5tCA1AI4KrMjsGm Mc5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775810917; x=1776415717; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JV6rcUCT3b6scy/wX+I6FjZ/QCG7z7QbNygugPtWuvs=; b=JQn9Or2oeleaMfY6bNrglao46IqJZYeqew6GLiC2Cm13N08x7umIuJh3HJMNcwhG1G wl0qyKs8GHQ8crAThKPblcvpaeNxzJRQnmgZpN6XgPdGYGlBHvFXftzbrhl74//bDB6p b+4RrHkBG9seKomYEwVVqHkkzgRpwfxhrrPercbzpvl/OiSjmytJvG1no/Uf9Rc0gYdC eg5jum+FvLSpZcmYxKkpIf8tkSelfkAZAhN5oCw7vJrQzM/LwSiIbmReavvNx8GHP2Dr dT6VpOis2M6X+zIpF9LiDPc2c9CYh82FMeN1I0P8WjYGMoQEYg7d7erTx3rBJ1KD1GhU y/Rw== X-Gm-Message-State: AOJu0Yw8V3SRP6tQ6/VcyE+JSBn4lnHAUH4sakDj+iJk66uas7zkdSsS OFbKbxTpU5/OwzOe1AUhDqGK846lGtbzjzCURZ/vvZaJaWMmGVGX9U6Uwii836Rezn/PxpCaqR3 E+sCA6tZk1zG/AWEL8pf5Di7QTLmJ6/M8ifCcI+w= X-Gm-Gg: AeBDievYbXnK05tfAPyhalNUuj0H5ajAfbfnApQ6NAXl6fdhNiAxyoM+YB5wXJLXcnp /AulA+wWmz5y2Gx9jWnQH1qdCM0xF7YDWzv6elBoCasm5+m1Aw+YBvprGEyYVQhxGLJ12CkxvEt xOqdobDjKfu9pdylSlN9Gd+/lbkEys1AN1nXiY62zlxhotzybrV+qU8LLj+hjYBgXOOjpfcFTzT WutPCvOLeKPMsH9WZ4SsvRkQE+GP7c0u/W/IlFbyKPy0VuG+VFhCSumixCtRV4O2coYDhEf2eYR /DWLBj08 X-Received: by 2002:a05:6820:5106:b0:67e:4004:dc93 with SMTP id 006d021491bc7-68be80df857mr737186eaf.29.1775810917256; Fri, 10 Apr 2026 01:48:37 -0700 (PDT) MIME-Version: 1.0 From: Richard Guo Date: Fri, 10 Apr 2026 17:48:26 +0900 X-Gm-Features: AQROBzAd17QcUuBYITd5PRhZTiKMDdWj2iGhnrDcBp4DU-BE5vlsvx0hZetsf6c Message-ID: Subject: var_is_nonnullable() fails to handle invalid NOT NULL constraints To: Pg Hackers Content-Type: multipart/mixed; boundary="000000000000e972da064f1732c3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e972da064f1732c3 Content-Type: text/plain; charset="UTF-8" While fixing another bug in var_is_nonnullable(), I noticed $subject. The NOTNULL_SOURCE_SYSCACHE code path (newly added for the NOT IN to anti-join transformation) checks pg_attribute.attnotnull, which can be true even for invalid (NOT VALID) NOT NULL constraints. The consequence is that query_outputs_are_not_nullable() could wrongly conclude that a subquery's output is non-nullable, causing NOT IN to be incorrectly converted to an anti-join. The attached fix checks the attnullability field in the relation's tuple descriptor instead, which correctly distinguishes valid from invalid constraints. This is also consistent with what we do in get_relation_notnullatts(). It could be argued that the added table_open/table_close call is a performance concern, but I don't think so: 1. The relation is already locked by the rewriter, so table_open(rte->relid, NoLock) is just a relcache lookup. 2. This code path is only reached when converting NOT IN to an anti-join, and only after the outer side of the test expression has already been proved non-nullable. 3. It is only called for relation RTEs in the subquery. Thoughts? - Richard --000000000000e972da064f1732c3 Content-Type: application/octet-stream; name="v1-0001-Fix-var_is_nonnullable-to-handle-invalid-NOT-NULL.patch" Content-Disposition: attachment; filename="v1-0001-Fix-var_is_nonnullable-to-handle-invalid-NOT-NULL.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnsnydvr0 RnJvbSA1MTkyYWVmOTIwOTM2MTMzYzdmZmI3NDgyNDY1ZTlhMTg0N2EwMTY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAxMCBBcHIgMjAyNiAxNjo1MToxOCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjFd IEZpeCB2YXJfaXNfbm9ubnVsbGFibGUoKSB0byBoYW5kbGUgaW52YWxpZCBOT1QgTlVMTAogY29u c3RyYWludHMKClRoZSBOT1ROVUxMX1NPVVJDRV9TWVNDQUNIRSBjb2RlIHBhdGggaW4gdmFyX2lz X25vbm51bGxhYmxlKCkgdXNlZApnZXRfYXR0bm90bnVsbCgpIHRvIGNoZWNrIHBnX2F0dHJpYnV0 ZS5hdHRub3RudWxsLCB3aGljaCBpcyB0cnVlIGZvcgpib3RoIHZhbGlkIGFuZCBpbnZhbGlkIChO T1QgVkFMSUQpIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQW4gaW52YWxpZApjb25zdHJhaW50IGRv ZXMgbm90IGd1YXJhbnRlZSB0aGUgYWJzZW5jZSBvZiBOVUxMcywgc28gdGhpcyBjb3VsZCBsZWFk CnRvIGluY29ycmVjdCByZXN1bHRzLiAgRm9yIGV4YW1wbGUsIHF1ZXJ5X291dHB1dHNfYXJlX25v dF9udWxsYWJsZSgpCmNvdWxkIHdyb25nbHkgY29uY2x1ZGUgdGhhdCBhIHN1YnF1ZXJ5J3Mgb3V0 cHV0IGlzIG5vbi1udWxsYWJsZSwKY2F1c2luZyBOT1QgSU4gdG8gYmUgaW5jb3JyZWN0bHkgY29u dmVydGVkIHRvIGFuIGFudGktam9pbi4KCkZpeCBieSBjaGVja2luZyB0aGUgYXR0bnVsbGFiaWxp dHkgZmllbGQgaW4gdGhlIHJlbGF0aW9uJ3MgdHVwbGUKZGVzY3JpcHRvciBpbnN0ZWFkLCB3aGlj aCBjb3JyZWN0bHkgZGlzdGluZ3Vpc2hlcyB2YWxpZCBmcm9tIGludmFsaWQKY29uc3RyYWludHMs IGNvbnNpc3RlbnQgd2l0aCB3aGF0IHRoZSBOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUgY29kZQpw YXRoIGFscmVhZHkgZG9lcy4KCldoaWxlIGF0IGl0LCByZW5hbWUgTk9UTlVMTF9TT1VSQ0VfU1lT Q0FDSEUgdG8gTk9UTlVMTF9TT1VSQ0VfQ0FUQUxPRwp0byByZWZsZWN0IHRoYXQgdGhpcyBjb2Rl IHBhdGggbm8gbG9uZ2VyIHVzZXMgYSBzeXNjYWNoZSBsb29rdXAsIGFuZApyZW1vdmUgdGhlIG5v dy11bnVzZWQgZ2V0X2F0dG5vdG51bGwoKSBmdW5jdGlvbi4KLS0tCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9jbGF1c2VzLmMgICAgfCAzNCArKysrKysrKysrKysrKysrKysrLS0tLS0tCiBz cmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYyAgICAgfCAyNyAtLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oICAgICAgIHwgIDIgKy0K IHNyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oICAgICAgICAgICB8ICAxIC0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCB8IDIzICsrKysrKysrKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAgICAgfCAxNCArKysrKysrKysrCiA2 IGZpbGVzIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCBjZDRlMmU4NmM2ZC4uNTk4YjRlZGFjY2Ug MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgor I2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YW5ndWFnZS5oIgpAQCAtNTksNiArNjAsNyBAQAogI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgi CiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKQEAgLTIxMzQsNyArMjEzNiw3IEBAIHF1ZXJ5 X291dHB1dHNfYXJlX25vdF9udWxsYWJsZShRdWVyeSAqcXVlcnkpCiAJCSAqIHBhcnNlIHRyZWUs IHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgbm90LW51bGwgY29uc3RyYWludHMgZnJvbSB0aGUKIAkJ ICogc3lzdGVtIGNhdGFsb2dzLgogCQkgKi8KLQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUoJnN1 YnJvb3QsIGV4cHIsIE5PVE5VTExfU09VUkNFX1NZU0NBQ0hFKSkKKwkJaWYgKGV4cHJfaXNfbm9u bnVsbGFibGUoJnN1YnJvb3QsIGV4cHIsIE5PVE5VTExfU09VUkNFX0NBVEFMT0cpKQogCQkJY29u dGludWU7CiAKIAkJaWYgKElzQShleHByLCBWYXIpKQpAQCAtNDY5NiwxMyArNDY5OCwxOSBAQCB2 YXJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBOb3ROdWxsU291 cmNlIHNvdXJjZSkKIAogCQkJCXJldHVybiBibXNfaXNfbWVtYmVyKHZhci0+dmFyYXR0bm8sIG5v dG51bGxhdHRudW1zKTsKIAkJCX0KLQkJY2FzZSBOT1ROVUxMX1NPVVJDRV9TWVNDQUNIRToKKwkJ Y2FzZSBOT1ROVUxMX1NPVVJDRV9DQVRBTE9HOgogCQkJewogCQkJCS8qCi0JCQkJICogV2UgbG9v ayB1cCB0aGUgImF0dG5vdG51bGwiIGZpZWxkIGluIHRoZSBhdHRyaWJ1dGUKLQkJCQkgKiByZWxh dGlvbi4KKwkJCQkgKiBXZSBjaGVjayB0aGUgYXR0bnVsbGFiaWxpdHkgZmllbGQgaW4gdGhlIHR1 cGxlIGRlc2NyaXB0b3IuCisJCQkJICogVGhpcyBpcyBuZWNlc3NhcnkgcmF0aGVyIHRoYW4gY2hl Y2tpbmcgdGhlIGF0dG5vdG51bGwgZmllbGQKKwkJCQkgKiBmcm9tIHRoZSBhdHRyaWJ1dGUgcmVs YXRpb24sIGJlY2F1c2UgYXR0bm90bnVsbCBpcyBhbHNvIHNldAorCQkJCSAqIGZvciBpbnZhbGlk IChOT1QgVkFMSUQpIE5PVCBOVUxMIGNvbnN0cmFpbnRzLCB3aGljaCBkbyBub3QKKwkJCQkgKiBn dWFyYW50ZWUgdGhlIGFic2VuY2Ugb2YgTlVMTHMuCiAJCQkJICovCiAJCQkJUmFuZ2VUYmxFbnRy eSAqcnRlOworCQkJCVJlbGF0aW9uCXJlbDsKKwkJCQlDb21wYWN0QXR0cmlidXRlICphdHRyOwor CQkJCWJvb2wJCXJlc3VsdDsKIAogCQkJCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2godmFyLT52YXJu bywgcm9vdCk7CiAKQEAgLTQ3MjMsNyArNDczMSwxNyBAQCB2YXJfaXNfbm9ubnVsbGFibGUoUGxh bm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBOb3ROdWxsU291cmNlIHNvdXJjZSkKIAkJCQkJcnRl LT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJCQkJCXJldHVybiBmYWxz ZTsKIAotCQkJCXJldHVybiBnZXRfYXR0bm90bnVsbChydGUtPnJlbGlkLCB2YXItPnZhcmF0dG5v KTsKKwkJCQkvKgorCQkJCSAqIFdlIG5lZWQgbm90IGxvY2sgdGhlIHJlbGF0aW9uIHNpbmNlIGl0 IHdhcyBhbHJlYWR5IGxvY2tlZAorCQkJCSAqIGJ5IHRoZSByZXdyaXRlci4KKwkJCQkgKi8KKwkJ CQlyZWwgPSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIE5vTG9jayk7CisJCQkJYXR0ciA9IFR1cGxl RGVzY0NvbXBhY3RBdHRyKFJlbGF0aW9uR2V0RGVzY3IocmVsKSwKKwkJCQkJCQkJCQkJdmFyLT52 YXJhdHRubyAtIDEpOworCQkJCXJlc3VsdCA9IChhdHRyLT5hdHRudWxsYWJpbGl0eSA9PSBBVFRO VUxMQUJMRV9WQUxJRCk7CisJCQkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOworCisJCQkJcmV0 dXJuIHJlc3VsdDsKIAkJCX0KIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgTm90TnVsbFNvdXJjZTogJWQiLApAQCAtNDc0Niw5ICs0NzY0LDkgQEAgdmFyX2lzX25vbm51 bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgTm90TnVsbFNvdXJjZSBzb3VyY2Up CiAgKgktIE5PVE5VTExfU09VUkNFX0hBU0hUQUJMRTogVXNlZCB3aGVuIFJlbE9wdEluZm9zIGFy ZSBub3QgeWV0IGF2YWlsYWJsZSwKICAqCWJ1dCB3ZSBoYXZlIGFscmVhZHkgY29sbGVjdGVkIHJl bGF0aW9uLWxldmVsIG5vdC1udWxsIGNvbnN0cmFpbnRzIGludG8gdGhlCiAgKglnbG9iYWwgaGFz aCB0YWJsZS4KLSAqCS0gTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEU6IFVzZWQgZm9yIHJhdyBwYXJz ZSB0cmVlcyB3aGVyZSBuZWl0aGVyCi0gKglSZWxPcHRJbmZvcyBub3IgdGhlIGhhc2ggdGFibGUg YXJlIGF2YWlsYWJsZS4gIEluIHRoaXMgY2FzZSwgd2UgaGF2ZSB0bwotICoJbG9vayB1cCB0aGUg J2F0dG5vdG51bGwnIGZpZWxkIGRpcmVjdGx5IGluIHRoZSBzeXN0ZW0gY2F0YWxvZ3MuCisgKgkt IE5PVE5VTExfU09VUkNFX0NBVEFMT0c6IFVzZWQgZm9yIHJhdyBwYXJzZSB0cmVlcyB3aGVyZSBu ZWl0aGVyCisgKglSZWxPcHRJbmZvcyBub3IgdGhlIGhhc2ggdGFibGUgYXJlIGF2YWlsYWJsZS4g IEluIHRoaXMgY2FzZSwgd2UgY2hlY2sgdGhlCisgKgljb2x1bW4ncyBhdHRudWxsYWJpbGl0eSBp biB0aGUgdHVwbGUgZGVzY3JpcHRvci4KICAqCiAgKiBGb3Igbm93LCB3ZSBzdXBwb3J0IG9ubHkg YSBsaW1pdGVkIHNldCBvZiBleHByZXNzaW9uIHR5cGVzLiAgU3VwcG9ydCBmb3IKICAqIGFkZGl0 aW9uYWwgbm9kZSB0eXBlcyBjYW4gYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvbHN5c2NhY2hlLmMKaW5kZXggOWIyYjk3ZjVjYmEuLmZhOWZlOWZmYTI2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwpAQCAtMTExNCwzMyArMTExNCw2IEBAIGdldF9hdHRv cHRpb25zKE9pZCByZWxpZCwgaW50MTYgYXR0bnVtKQogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8q Ci0gKiBnZXRfYXR0bm90bnVsbAotICoKLSAqCQlHaXZlbiB0aGUgcmVsYXRpb24gaWQgYW5kIHRo ZSBhdHRyaWJ1dGUgbnVtYmVyLAotICoJCXJldHVybiB0aGUgImF0dG5vdG51bGwiIGZpZWxkIGZy b20gdGhlIGF0dHJpYnV0ZSByZWxhdGlvbi4KLSAqLwotYm9vbAotZ2V0X2F0dG5vdG51bGwoT2lk IHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSkKLXsKLQlIZWFwVHVwbGUJdHA7Ci0JYm9vbAkJcmVz dWx0ID0gZmFsc2U7Ci0KLQl0cCA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCi0JCQkJCQkgT2Jq ZWN0SWRHZXREYXR1bShyZWxpZCksCi0JCQkJCQkgSW50MTZHZXREYXR1bShhdHRudW0pKTsKLQot CWlmIChIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKLQl7Ci0JCUZvcm1fcGdfYXR0cmlidXRlIGF0dF90 dXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVCh0cCk7Ci0KLQkJcmVzdWx0ID0gYXR0 X3R1cC0+YXR0bm90bnVsbDsKLQkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKLQl9Ci0KLQlyZXR1cm4g cmVzdWx0OwotfQotCiAvKgkJCQktLS0tLS0tLS0tIFBHX0NBU1QgQ0FDSEUgLS0tLS0tLS0tLQkJ CQkJICovCiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVy LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKaW5kZXggZThiNDA5YWZiN2Yu LmNiNjI0MWUyYmRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVy LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCkBAIC0xMzUsNyArMTM1 LDcgQEAgdHlwZWRlZiBlbnVtCiB7CiAJTk9UTlVMTF9TT1VSQ0VfUkVMT1BULAkJLyogVXNlIFJl bE9wdEluZm8gKi8KIAlOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUsCS8qIFVzZSBHbG9iYWwgSGFz aCBUYWJsZSAqLwotCU5PVE5VTExfU09VUkNFX1NZU0NBQ0hFLAkvKiBVc2UgU3lzdGVtIENhdGFs b2cgKi8KKwlOT1ROVUxMX1NPVVJDRV9DQVRBTE9HLAkJLyogVXNlIFN5c3RlbSBDYXRhbG9nICov CiB9IE5vdE51bGxTb3VyY2U7CiAKIGV4dGVybiBib29sIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlv bnMoTm9kZSAqY2xhdXNlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNo ZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKaW5kZXggZTU3Nzk1ZmEwMWYuLjJl MDI1OGQ4NzdlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaApAQCAtOTksNyArOTksNiBAQCBleHRlcm4g T2lkCWdldF9hdHR0eXBlKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pOwogZXh0ZXJuIHZv aWQgZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0sCiAJ CQkJCQkJCSAgT2lkICp0eXBpZCwgaW50MzIgKnR5cG1vZCwgT2lkICpjb2xsaWQpOwogZXh0ZXJu IERhdHVtIGdldF9hdHRvcHRpb25zKE9pZCByZWxpZCwgaW50MTYgYXR0bnVtKTsKLWV4dGVybiBi b29sIGdldF9hdHRub3RudWxsKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pOwogZXh0ZXJu IE9pZAlnZXRfY2FzdF9vaWQoT2lkIHNvdXJjZXR5cGVpZCwgT2lkIHRhcmdldHR5cGVpZCwgYm9v bCBtaXNzaW5nX29rKTsKIGV4dGVybiBjaGFyICpnZXRfY29sbGF0aW9uX25hbWUoT2lkIGNvbGxv aWQpOwogZXh0ZXJuIGJvb2wgZ2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0aWMoT2lkIGNvbGxv aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CmluZGV4IDIwMDIzNmEw YTY5Li5hMzc3OGMyM2MzNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dWJzZWxlY3Qub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91 dApAQCAtMzc2MSw0ICszNzYxLDI3IEBAIFdIRVJFIE5PVCBpZCA/PSBBTlkgKFNFTEVDVCBpZCBG Uk9NIG5vdF9udWxsX3RhYik7CiAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90 YWIgbm90X251bGxfdGFiXzEKICg1IHJvd3MpCiAKKy0tIE5vIEFOVEkgSk9JTjogdGhlIGlubmVy IHNpZGUgaGFzIGFuIHVudmFsaWRhdGVkIE5PVCBOVUxMIGNvbnN0cmFpbnQsIHNvCistLSB0aGUg Y29sdW1uIG1pZ2h0IGNvbnRhaW4gTlVMTHMuCitDUkVBVEUgVEVNUCBUQUJMRSBub3RudWxsX25v dHZhbGlkX3RhYiAoaWQgaW50KTsKK0lOU0VSVCBJTlRPIG5vdG51bGxfbm90dmFsaWRfdGFiIFZB TFVFUyAoTlVMTCk7CitBTFRFUiBUQUJMRSBub3RudWxsX25vdHZhbGlkX3RhYiBBREQgQ09OU1RS QUlOVCBubiBOT1QgTlVMTCBpZCBOT1QgVkFMSUQ7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBu b3RudWxsX25vdHZhbGlkX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisg ICBGaWx0ZXI6IChOT1QgKEFOWSAoaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkK KyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdG51bGxfbm90dmFsaWRf dGFiCisoNCByb3dzKQorCistLSBOT1QgSU4gd2l0aCBOVUxMIG9uIGlubmVyIHNpZGUgc2hvdWxk IHJldHVybiBubyByb3dzCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9U IElOIChTRUxFQ1QgaWQgRlJPTSBub3RudWxsX25vdHZhbGlkX3RhYik7CisgaWQgfCB2YWwgCist LS0tKy0tLS0tCisoMCByb3dzKQorCiBST0xMQkFDSzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Qu c3FsCmluZGV4IDRjZDAxNmY0YWMzLi4xYTAyYzNmODZjMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJz ZWxlY3Quc3FsCkBAIC0xNjMyLDQgKzE2MzIsMTggQEAgRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VM RUNUICogRlJPTSBub3RfbnVsbF90YWIKIFdIRVJFIE5PVCBpZCA/PSBBTlkgKFNFTEVDVCBpZCBG Uk9NIG5vdF9udWxsX3RhYik7CiAKKy0tIE5vIEFOVEkgSk9JTjogdGhlIGlubmVyIHNpZGUgaGFz IGFuIHVudmFsaWRhdGVkIE5PVCBOVUxMIGNvbnN0cmFpbnQsIHNvCistLSB0aGUgY29sdW1uIG1p Z2h0IGNvbnRhaW4gTlVMTHMuCitDUkVBVEUgVEVNUCBUQUJMRSBub3RudWxsX25vdHZhbGlkX3Rh YiAoaWQgaW50KTsKK0lOU0VSVCBJTlRPIG5vdG51bGxfbm90dmFsaWRfdGFiIFZBTFVFUyAoTlVM TCk7CitBTFRFUiBUQUJMRSBub3RudWxsX25vdHZhbGlkX3RhYiBBREQgQ09OU1RSQUlOVCBubiBO T1QgTlVMTCBpZCBOT1QgVkFMSUQ7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdG51bGxf bm90dmFsaWRfdGFiKTsKKworLS0gTk9UIElOIHdpdGggTlVMTCBvbiBpbm5lciBzaWRlIHNob3Vs ZCByZXR1cm4gbm8gcm93cworU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5P VCBJTiAoU0VMRUNUIGlkIEZST00gbm90bnVsbF9ub3R2YWxpZF90YWIpOworCiBST0xMQkFDSzsK LS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000e972da064f1732c3--