Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pyT7o-0003ku-Sc for pgsql-bugs@arkaria.postgresql.org; Mon, 15 May 2023 08:00:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pyT7n-0002i5-Mg for pgsql-bugs@arkaria.postgresql.org; Mon, 15 May 2023 08:00:07 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pyT7n-0002gW-DJ for pgsql-bugs@lists.postgresql.org; Mon, 15 May 2023 08:00:07 +0000 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1pyT7k-002pwZ-Kg for pgsql-bugs@lists.postgresql.org; Mon, 15 May 2023 08:00:06 +0000 Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-4f22908a082so11163315e87.1 for ; Mon, 15 May 2023 01:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684137604; x=1686729604; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=QedsUi5Eqkktakn6w2wiDpNLH5iMK284bzbeVzduK20=; b=aujrx1mcNaGl9xADH4bqSM3cSZ1tyylwQBtXL5bAHBnHke5bE0pmt1c6EDGHpGw+/1 GJxZ+AglO5nfNPUQXiv0/kuaelTls345pycvr/ak5J7ysfT9/J0GO45n93wyJurmRPE2 lcluM4sud/pupL77jtTC6a/3uFACgyejp++7NMo78Oe3B36vgL5JFuj0+wAWuft5o7O1 etNTeWkzyA7KWzUSpn/p8jaWSs20KzQbUeXPkhjXU/2xv74fLqimlT5S2z5V9xaay/PH tUaZOX+yovVJLuEEfjn8a1erMIBkkCH01zYO0FtAFVSW5gXC87OuarY/HFsCKyOyxKIM 7NlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684137604; x=1686729604; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=QedsUi5Eqkktakn6w2wiDpNLH5iMK284bzbeVzduK20=; b=UUBjgiDE5Sd/4nafDe43CpnZnpkzqRZAMkX03maxXonDFmYrNIC9sQp0j2rN+3/Hah C4huTPsxaR6hoS146kJyduaNBsbk32TsddMxgreIgeiDzBmru/XUUiDCDR4nA34VTASs SEwJa13FbPA0qZnb/UJnewmzHB0kjPkSUHdj30SD1DyWU1LhfHBSTqaFsRGhRZWJpw7o GqOh/Ma3mskylQypS4mDrWdoa3AYoruwBvbCBxLf8G8HbiX2dllMy6d3JbklFHSIms9H pJ8jiL04V04QIrGMU3weYupPuFcHqNbLmBbdNP35uBiHS4l1CzMvgYoZQfYM/UXDgI8q o/7g== X-Gm-Message-State: AC+VfDzFg3IkUbb9+/AeffEPc8lbWBQIOOlIYBStW4YodqkcxWAERNzB GXoT7PrmeG0h3vyRrc2zL2Y= X-Google-Smtp-Source: ACHHUZ7ZjRubLDVgSQkjTeR/Uh8PKnDsAiGOz2SpdqZhHvH68k/5uzGoxqTiydPl9zjtRLSEps5/ew== X-Received: by 2002:a05:6512:96e:b0:4ef:fb4b:eb2d with SMTP id v14-20020a056512096e00b004effb4beb2dmr4797519lft.33.1684137603434; Mon, 15 May 2023 01:00:03 -0700 (PDT) Received: from [1.0.0.7] ([81.23.166.126]) by smtp.gmail.com with ESMTPSA id x24-20020a19f618000000b004eff530efe7sm2486389lfe.93.2023.05.15.01.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 May 2023 01:00:02 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------PP9wHKpcaSxv6ZSz0may0Aeg" Message-ID: <8a991814-97c0-81d6-1e24-60c26308f005@gmail.com> Date: Mon, 15 May 2023 11:00:00 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: BUG #17884: gist_page_items() crashes for a non-leaf page of an index with non-key columns Content-Language: en-US To: Michael Paquier Cc: pgsql-bugs@lists.postgresql.org, Andrey Borodin References: <17884-cb8c326522977acb@postgresql.org> <92873f8d-a9b1-0ee8-5753-ee4a1664fb0e@gmail.com> From: Alexander Lakhin In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------PP9wHKpcaSxv6ZSz0may0Aeg Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Michael, 15.05.2023 03:41, Michael Paquier wrote: > On Fri, May 12, 2023 at 01:00:01PM +0300, Alexander Lakhin wrote: >> Please look at the patch attached, that makes gist_page_items() process items >> on leaf and non-leaf pages differently, accounting for their contents. >> I've decided to move away from BuildIndexValueDescription(), but borrow some >> of it's code, for two reasons: >> that function outputs only key columns; >> it checks permissions for a table/index, but this is not needed for pageinspect >> (firstly, because a user already has all the data do decode; >> secondly, because gist_page_items() requires a superuser role anyway). > I have not looked in details at the patch, and GiST is going to > require some analysis, still I have a few comments after a lookup :) Thanks for your comments! > Anyway, is it right to assume that gist_page_items() is basically > incorrect now with an included index, especially if one scans a range > of pages, hitting leaves? Yes, the existing implementation might crash with non-leaf pages and just doesn't show non-key columns for items on leaves. > The test output is a bit bloated. Could it be possible to make it > shorter, like limiting the output to the first and last items, for > example, as the goal is mainly to check the output format? This could > check for the number of tuples, as well, but I am wondering if this > would be stable across the buildfarm. > > + if (itup_isnull[i]) > + val = "null"; > > The patch includes something for a NULL value, but does not seem to > output anything related to it in the regression test. Yeah, the test output could be shorter and more representative at the same time. Please look at the improved test. > +extern char *pg_get_indexdef_columns_with_included(Oid indexrelid, > + bool pretty); > > Hmm. For back-branches, this approach would be fine, and even on HEAD > I would not remove pg_get_indexdef_columns(). Still, for this new > one, would it be better to have an _extended() version of this routine > with some bits32 to control the addition of included columns and the > pretty flag? For the API published, only these two would be > necessary. It sounds good to me, but for now I can see only a single caller of pg_get_indexdef_columns(), so maybe it would be harmless to merely change the existing function's parameter on HEAD? (To not have two distinct functions with generic parameters for just two callers, which will use only two fixed parameter values.) Best regards, Alexander --------------PP9wHKpcaSxv6ZSz0may0Aeg Content-Type: text/x-patch; charset=UTF-8; name="v2-01-fix-gist_page_items-for-index-with-INCLUDE.patch" Content-Disposition: attachment; filename="v2-01-fix-gist_page_items-for-index-with-INCLUDE.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvZ2lzdC5vdXQgYi9j b250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2dpc3Qub3V0CmluZGV4IDQ2MGJlZjMwMzcu LmI3NzY3Y2RiNDIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQv Z2lzdC5vdXQKKysrIGIvY29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9naXN0Lm91dApA QCAtMTA3LDQgKzEwNywyMSBAQCBTRUxFQ1QgZ2lzdF9wYWdlX29wYXF1ZV9pbmZvKGRlY29k ZShyZXBlYXQoJzAwJywgOmJsb2NrX3NpemUpLCAnaGV4JykpOwogIAogKDEgcm93KQogCist LSBUZXN0IGdpc3RfcGFnZV9pdGVtcyB3aXRoIHBhZ2VzIG9mIGFuIGluZGV4IGNvbnRhaW5p bmcgbm9uLWtleSBjb2x1bW5zCitBTFRFUiBUQUJMRSB0ZXN0X2dpc3QgQUREIENPTFVNTiBp IGludDsKK0NSRUFURSBJTkRFWCB0ZXN0X2dpc3RfaWR4X2luYyBPTiB0ZXN0X2dpc3QgVVNJ TkcgZ2lzdCAocCkgSU5DTFVERSAodCwgaSk7CitTRUxFQ1QgKiBGUk9NIGdpc3RfcGFnZV9p dGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3RfZ2lzdF9pZHhfaW5jJywgMCksICd0ZXN0X2dpc3Rf aWR4X2luYycpCisgICBXSEVSRSBpdGVtb2Zmc2V0ID0gMTsKKyBpdGVtb2Zmc2V0IHwgICBj dGlkICAgIHwgaXRlbWxlbiB8IGRlYWQgfCAgICAgIGtleXMgICAgICAgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgIDEgfCAoMSw2NTUzNSkgfCAgICAgIDQwIHwgZiAgICB8IChwKT0oKDEzNSwxMzUp KQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGdpc3RfcGFnZV9pdGVtcyhnZXRfcmF3X3Bh Z2UoJ3Rlc3RfZ2lzdF9pZHhfaW5jJywgMSksICd0ZXN0X2dpc3RfaWR4X2luYycpCisgICBX SEVSRSBpdGVtb2Zmc2V0ID0gMTsKKyBpdGVtb2Zmc2V0IHwgY3RpZCAgfCBpdGVtbGVuIHwg ZGVhZCB8ICAgICAgICAgICAgICAgICAgICAga2V5cyAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgMSB8ICgwLDEpIHwg ICAgICA1NiB8IGYgICAgfCAocCkgSU5DTFVERSAodCwgaSk9KCgxLDEpKSBJTkNMVURFICgx LCBudWxsKQorKDEgcm93KQorCiBEUk9QIFRBQkxFIHRlc3RfZ2lzdDsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGFnZWluc3BlY3QvZ2lzdGZ1bmNzLmMgYi9jb250cmliL3BhZ2VpbnNwZWN0 L2dpc3RmdW5jcy5jCmluZGV4IDNkY2E3ZjEzMTguLjQyMjI5MDMxMWMgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcGFnZWluc3BlY3QvZ2lzdGZ1bmNzLmMKKysrIGIvY29udHJpYi9wYWdlaW5z cGVjdC9naXN0ZnVuY3MuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgogI2luY2x1ZGUgInV0aWxzL3Zhcmxl bmEuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9s c3lzY2FjaGUuaCIKIAogUEdfRlVOQ1RJT05fSU5GT19WMShnaXN0X3BhZ2Vfb3BhcXVlX2lu Zm8pOwogUEdfRlVOQ1RJT05fSU5GT19WMShnaXN0X3BhZ2VfaXRlbXMpOwpAQCAtMTk4LDkg KzIwMCwxMiBAQCBnaXN0X3BhZ2VfaXRlbXMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlp bmRleFJlbGlkID0gUEdfR0VUQVJHX09JRCgxKTsKIAlSZXR1cm5TZXRJbmZvICpyc2luZm8g PSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CiAJUmVsYXRpb24JaW5k ZXhSZWw7CisJVHVwbGVEZXNjCXR1cGRlc2M7CiAJUGFnZQkJcGFnZTsKKwl1aW50MTYJCWZs YWdiaXRzOwogCU9mZnNldE51bWJlciBvZmZzZXQ7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZiA9 IEludmFsaWRPZmZzZXROdW1iZXI7CisJY2hhcgkgICAqaW5kZXhfY29sdW1uczsKIAogCWlm ICghc3VwZXJ1c2VyKCkpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0yMjYsNiArMjMxLDE5IEBA IGdpc3RfcGFnZV9pdGVtcyhQR19GVU5DVElPTl9BUkdTKQogCQlQR19SRVRVUk5fTlVMTCgp OwogCX0KIAorCWZsYWdiaXRzID0gR2lzdFBhZ2VHZXRPcGFxdWUocGFnZSktPmZsYWdzOwor CWlmIChmbGFnYml0cyAmIEZfTEVBRikKKwl7CisJCXR1cGRlc2MgPSBSZWxhdGlvbkdldERl c2NyKGluZGV4UmVsKTsKKwkJaW5kZXhfY29sdW1ucyA9IHBnX2dldF9pbmRleGRlZl9jb2x1 bW5zX3dpdGhfaW5jbHVkZWQoaW5kZXhSZWxpZCwgdHJ1ZSk7CisJfQorCWVsc2UKKwl7CisJ CXR1cGRlc2MgPSBDcmVhdGVUdXBsZURlc2NDb3B5KFJlbGF0aW9uR2V0RGVzY3IoaW5kZXhS ZWwpKTsKKwkJdHVwZGVzYy0+bmF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlB dHRyaWJ1dGVzKGluZGV4UmVsKTsKKwkJaW5kZXhfY29sdW1ucyA9IHBnX2dldF9pbmRleGRl Zl9jb2x1bW5zKGluZGV4UmVsaWQsIHRydWUpOworCX0KKwogCS8qIEF2b2lkIGJvZ3VzIFBh Z2VHZXRNYXhPZmZzZXROdW1iZXIoKSBjYWxsIHdpdGggZGVsZXRlZCBwYWdlcyAqLwogCWlm IChHaXN0UGFnZUlzRGVsZXRlZChwYWdlKSkKIAkJZWxvZyhOT1RJQ0UsICJwYWdlIGlzIGRl bGV0ZWQiKTsKQEAgLTI0Miw3ICsyNjAsOCBAQCBnaXN0X3BhZ2VfaXRlbXMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJSW5kZXhUdXBsZQlpdHVwOwogCQlEYXR1bQkJaXR1cF92YWx1ZXNbSU5E RVhfTUFYX0tFWVNdOwogCQlib29sCQlpdHVwX2lzbnVsbFtJTkRFWF9NQVhfS0VZU107Ci0J CWNoYXIJICAgKmtleV9kZXNjOworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisJCWludAkJCWk7 CiAKIAkJaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZnNldCk7CiAKQEAgLTI1MSw3ICsy NzAsNyBAQCBnaXN0X3BhZ2VfaXRlbXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCQlpdHVwID0g KEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlkKTsKIAotCQlpbmRleF9kZWZvcm1f dHVwbGUoaXR1cCwgUmVsYXRpb25HZXREZXNjcihpbmRleFJlbCksCisJCWluZGV4X2RlZm9y bV90dXBsZShpdHVwLCB0dXBkZXNjLAogCQkJCQkJICAgaXR1cF92YWx1ZXMsIGl0dXBfaXNu dWxsKTsKIAogCQltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOwpAQCAtMjYxLDkg KzI4MCw1NiBAQCBnaXN0X3BhZ2VfaXRlbXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFsdWVz WzJdID0gSW50MzJHZXREYXR1bSgoaW50KSBJbmRleFR1cGxlU2l6ZShpdHVwKSk7CiAJCXZh bHVlc1szXSA9IEJvb2xHZXREYXR1bShJdGVtSWRJc0RlYWQoaWQpKTsKIAotCQlrZXlfZGVz YyA9IEJ1aWxkSW5kZXhWYWx1ZURlc2NyaXB0aW9uKGluZGV4UmVsLCBpdHVwX3ZhbHVlcywg aXR1cF9pc251bGwpOwotCQlpZiAoa2V5X2Rlc2MpCi0JCQl2YWx1ZXNbNF0gPSBDU3RyaW5n R2V0VGV4dERhdHVtKGtleV9kZXNjKTsKKwkJaWYgKGluZGV4X2NvbHVtbnMpCisJCXsKKwkJ CWluaXRTdHJpbmdJbmZvKCZidWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiKCVz KT0oIiwgaW5kZXhfY29sdW1ucyk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5u YXR0czsgaSsrKQorCQkJeworCQkJCWNoYXIJICAgKnZhbDsKKworCQkJCWlmIChpdHVwX2lz bnVsbFtpXSkKKwkJCQkJdmFsID0gIm51bGwiOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCU9p ZAkJCWZvdXRvaWQ7CisJCQkJCWJvb2wJCXR5cGlzdmFybGVuYTsKKworCQkJCQlpZiAoaSA8 IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXhSZWwpKQorCQkJ CQl7CisJCQkJCQkvKgorCQkJCQkJKiBVc2UgcmRfb3BjaW50eXBlIGZvciBrZXkgY29sdW1u cyBhcyBpbgorCQkJCQkJKiBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbigpLgorCQkJCQkJ Ki8KKwkJCQkJCWdldFR5cGVPdXRwdXRJbmZvKGluZGV4UmVsLT5yZF9vcGNpbnR5cGVbaV0s CisJCQkJCQkJCQkJICAmZm91dG9pZCwgJnR5cGlzdmFybGVuYSk7CisJCQkJCX0KKwkJCQkJ ZWxzZQorCQkJCQl7CisJCQkJCQlnZXRUeXBlT3V0cHV0SW5mbyh0dXBkZXNjLT5hdHRyc1tp XS5hdHR0eXBpZCwKKwkJCQkJCQkJCQkgICZmb3V0b2lkLCAmdHlwaXN2YXJsZW5hKTsKKwkJ CQkJfQorCQkJCQl2YWwgPSBPaWRPdXRwdXRGdW5jdGlvbkNhbGwoZm91dG9pZCwgaXR1cF92 YWx1ZXNbaV0pOworCQkJCX0KKworCQkJCWlmIChpID09IEluZGV4UmVsYXRpb25HZXROdW1i ZXJPZktleUF0dHJpYnV0ZXMoaW5kZXhSZWwpKQorCQkJCXsKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmYnVmLCAiKSBJTkNMVURFICgiKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAo aSA+IDApCisJCQkJeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIsICIp OworCQkJCX0KKworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgdmFsKTsKKwkJ CX0KKworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKworCQkJdmFsdWVz WzRdID0gQ1N0cmluZ0dldFRleHREYXR1bShidWYuZGF0YSk7CisJCQludWxsc1s0XSA9IGZh bHNlOworCQl9CiAJCWVsc2UKIAkJewogCQkJdmFsdWVzWzRdID0gKERhdHVtKSAwOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9zcWwvZ2lzdC5zcWwgYi9jb250cmliL3Bh Z2VpbnNwZWN0L3NxbC9naXN0LnNxbAppbmRleCA0Nzg3Yjc4NGE0Li4zOThhZjAxYzY2IDEw MDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L3NxbC9naXN0LnNxbAorKysgYi9jb250 cmliL3BhZ2VpbnNwZWN0L3NxbC9naXN0LnNxbApAQCAtNTIsNCArNTIsMTIgQEAgU0VMRUNU IGdpc3RfcGFnZV9pdGVtc19ieXRlYShkZWNvZGUocmVwZWF0KCcwMCcsIDpibG9ja19zaXpl KSwgJ2hleCcpKTsKIFNFTEVDVCBnaXN0X3BhZ2VfaXRlbXMoZGVjb2RlKHJlcGVhdCgnMDAn LCA6YmxvY2tfc2l6ZSksICdoZXgnKSwgJ3Rlc3RfZ2lzdF9pZHgnOjpyZWdjbGFzcyk7CiBT RUxFQ1QgZ2lzdF9wYWdlX29wYXF1ZV9pbmZvKGRlY29kZShyZXBlYXQoJzAwJywgOmJsb2Nr X3NpemUpLCAnaGV4JykpOwogCistLSBUZXN0IGdpc3RfcGFnZV9pdGVtcyB3aXRoIHBhZ2Vz IG9mIGFuIGluZGV4IGNvbnRhaW5pbmcgbm9uLWtleSBjb2x1bW5zCitBTFRFUiBUQUJMRSB0 ZXN0X2dpc3QgQUREIENPTFVNTiBpIGludDsKK0NSRUFURSBJTkRFWCB0ZXN0X2dpc3RfaWR4 X2luYyBPTiB0ZXN0X2dpc3QgVVNJTkcgZ2lzdCAocCkgSU5DTFVERSAodCwgaSk7CitTRUxF Q1QgKiBGUk9NIGdpc3RfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3RfZ2lzdF9pZHhf aW5jJywgMCksICd0ZXN0X2dpc3RfaWR4X2luYycpCisgICBXSEVSRSBpdGVtb2Zmc2V0ID0g MTsKK1NFTEVDVCAqIEZST00gZ2lzdF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdF9n aXN0X2lkeF9pbmMnLCAxKSwgJ3Rlc3RfZ2lzdF9pZHhfaW5jJykKKyAgIFdIRVJFIGl0ZW1v ZmZzZXQgPSAxOworCiBEUk9QIFRBQkxFIHRlc3RfZ2lzdDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCA2MGY5ZDA4ZDVkLi43MWY2NTA4NjhhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xMjE1LDYgKzEyMTUsMjAgQEAgcGdfZ2V0X2luZGV4 ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KQogCQkJCQkJCQkgIHBy ZXR0eUZsYWdzLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNpb24gdGhhdCByZXBv cnRzIGFsc28gdGhlIG5vbi1rZXktY29sdW1uIGRlZmluaXRpb25zICovCitjaGFyICoKK3Bn X2dldF9pbmRleGRlZl9jb2x1bW5zX3dpdGhfaW5jbHVkZWQoT2lkIGluZGV4cmVsaWQsIGJv b2wgcHJldHR5KQoreworCWludAkJCXByZXR0eUZsYWdzOworCisJcHJldHR5RmxhZ3MgPSBH RVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7CisKKwlyZXR1cm4gcGdfZ2V0X2luZGV4ZGVmX3dv cmtlcihpbmRleHJlbGlkLCAwLCBOVUxMLAorCQkJCQkJCQkgIHRydWUsIGZhbHNlLAorCQkJ CQkJCQkgIGZhbHNlLCBmYWxzZSwKKwkJCQkJCQkJICBwcmV0dHlGbGFncywgZmFsc2UpOwor fQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBhbiBpbmRleCBk ZWZpbml0aW9uLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGls cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggMWE0MmQ5ZjM5Yi4u ZDIyMTcyNGNjMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKQEAgLTIzLDYgKzIzLDggQEAg c3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0 cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2Nv bHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19n ZXRfaW5kZXhkZWZfY29sdW1uc193aXRoX2luY2x1ZGVkKE9pZCBpbmRleHJlbGlkLAorCQkJ CQkJCQkJCQkJICAgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRl ZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9w YXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7Cg== --------------PP9wHKpcaSxv6ZSz0may0Aeg--