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 1pzHhN-0000Vr-Us for pgsql-bugs@arkaria.postgresql.org; Wed, 17 May 2023 14:00:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pzHhM-0007BM-02 for pgsql-bugs@arkaria.postgresql.org; Wed, 17 May 2023 14:00:12 +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 1pzHhL-00078G-Jx for pgsql-bugs@lists.postgresql.org; Wed, 17 May 2023 14:00:11 +0000 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1pzHhD-000M7k-PH for pgsql-bugs@lists.postgresql.org; Wed, 17 May 2023 14:00:10 +0000 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4f14468ef54so1063365e87.0 for ; Wed, 17 May 2023 07:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684332003; x=1686924003; 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=NB+JdfuifzlfhgP0Kti56CTA6LaXgvXKG6yBbd2P0YA=; b=heJTxL2SxOcmlRk5K45fY57+PHkL6jX1X0tHNO5ClrZDEa0o55y85tCqpDtW/yO++2 ycuFEgENuaJfG70xNh6fysWbXU4qtDxECYIZx28ragH5GYEYf7zb+1rY3EpFPkd2vi1E cvji1D+Q8+PbRA4shQOn7CHv0Gu4NvB6zh9RQyudueyERYxqjxIx3SqfhU/Bzyu2v2xj +DNS0IKTXXwDZRtBaTWycTnNOwamTdsabTcRuLOl6oBvMNjOk/FpLUtNAAieUGyoBtDs KW6FmHrQwAzTM0l2EOc/vizziJ95x6BbVIxnhePnpLUvq5C75tKowbsw26j+8vRXDPMM M+og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684332003; x=1686924003; 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=NB+JdfuifzlfhgP0Kti56CTA6LaXgvXKG6yBbd2P0YA=; b=Nwm4n0P3Cx+q+ZP+3iR5I81CmP2uIaQFKuCGNIAHLJo1qb8sFZ8+xU6eAk7atbZstz tsFGajFOQ8pW9Y4cg2IMvhWo96BcrF4mpK2x3Cpu408PA87PlHOeWbp+J8zbV2UFjdec yjfI2QJIRGYdSiGG4VaiO/noE0n4JwJcxJjS7uLbYRZCQhy5IQYOcyp3jl8JO1wRp3L0 RYAKMfBGffyFKGUPcIAQYO9r36t5TOmJbaYwu+SvbpVwrW6Ir2KcSzs+BjP2Nz1jra7/ hJ0vihqRVFNv+z1iPzlYK8C8GvQ2cndtmgwE19jR8DG9Ii5NOp4ogX2FkRILwRSwfySb TY6A== X-Gm-Message-State: AC+VfDwSSD63OYJkfyWEixzGl9emFkvytG+A83QIdEV67XCk9gH6uRH1 /RQWIMgdwTfSousyUUzlH1rg9SRNwM9dzA== X-Google-Smtp-Source: ACHHUZ7vS4b9eLt8qb7PgC/u5zbyfcLrMSD0TImrknXAJBngPOisD9RfmJKonMvlAu+Ypp+wRuMdZA== X-Received: by 2002:ac2:5491:0:b0:4f2:61c8:fd0d with SMTP id t17-20020ac25491000000b004f261c8fd0dmr233957lfk.48.1684332003212; Wed, 17 May 2023 07:00:03 -0700 (PDT) Received: from [1.0.0.7] ([81.23.166.126]) by smtp.gmail.com with ESMTPSA id b24-20020ac25638000000b004eb274b3a43sm3331681lff.134.2023.05.17.07.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 May 2023 07:00:02 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------7qs8UrTHzTdwCytuigk2SQOQ" Message-ID: Date: Wed, 17 May 2023 17: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> <8a991814-97c0-81d6-1e24-60c26308f005@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. --------------7qs8UrTHzTdwCytuigk2SQOQ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 17.05.2023 08:23, Michael Paquier wrote: > On Mon, May 15, 2023 at 11:00:00AM +0300, Alexander Lakhin wrote: >> Yes, the existing implementation might crash with non-leaf pages and just >> doesn't show non-key columns for items on leaves. > Ah, OK. After more caffeine.. So that's two problems, not one. Perhaps I had the lack of caffeine too, because it seems that I missed third one. I'm sorry about that. >> Yeah, the test output could be shorter and more representative at the same >> time. Please look at the improved test. > Sounds fine as it is, thanks for the update. The patch is now much > shorter in size. Yes, but I'm afraid it is not a final version yet. >> 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.) > Sure, we could do that for HEAD, but we would still have to maintain > an extra routine for the back-branches. So I would tend to choose an > approach that's consistent across all the branches while being as much > as possible extensible. I am fine with this approach, Thank you! > + tupdesc = CreateTupleDescCopy(RelationGetDescr(indexRel)); > + tupdesc->natts = IndexRelationGetNumberOfKeyAttributes(indexRel); > > Ah, I see. So you need that to be able to deform correctly the tuple > coming from a non-leaf page that only has key attributes. Tricky at > first sight, indeed.. Yes, the same thing was done in f2e403803, so I think we can safely repeat it here. > I have done a few adjustments to that patch, refining some comments, > fixing some ordering with the headers and applying an indentation. Is > that OK for you? While thinking about naming (what exactly "attroid" means there), I've reread the comment above BuildIndexValueDescription():  * The passed-in values/nulls arrays are the "raw" input to the index AM,  * e.g. results of FormIndexDatum --- this is not necessarily what is stored  * in the index, but it's what the user perceives to be stored. and recognized that I've made a mistake when relied on the existing coding. A simple example: create extension pageinspect; create extension pg_trgm; create table test_trgm(t text); create index trgm_idx on test_trgm using gist (t gist_trgm_ops); insert into test_trgm select to_char(g, 'textFM000')  from generate_series(1, 1000) g; select gist_page_items(get_raw_page('trgm_idx', 0), 'trgm_idx'::regclass); select gist_page_items(get_raw_page('trgm_idx', 1), 'trgm_idx'::regclass); (I chose gist_trgm_ops because that opclass defined as follows: CREATE OPERATOR CLASS gist_trgm_ops FOR TYPE text USING gist ... STORAGE gtrgm) shows garbage values:                gist_page_items ---------------------------------------------  (1,"(1,65535)",32,f,"(t)=(\x02\x7F\x7F_ߟ)")  (2,"(3,65535)",32,f,"(t)=(\x02')")  (3,"(2,65535)",32,f,"(t)=(\x02߽)")  (4,"(5,65535)",32,f,"(t)=(\x02\x7F)")  (5,"(4,65535)",32,f,"(t)=(\x02w?\x7F)")  (6,"(6,65535)",32,f,"(t)=(\x02/)") (6 rows)                       gist_page_items -----------------------------------------------------------  (1,"(0,198)",40,f,"(t)=(\x01  t te19898 extt19texxt1)")  (2,"(0,200)",40,f,"(t)=(\x01  t te00 200extt20texxt2)")  (3,"(0,202)",40,f,"(t)=(\x01  t te02 202extt20texxt2)")  (4,"(0,203)",40,f,"(t)=(\x01  t te03 203extt20texxt2)")  (5,"(0,56)",40,f,"(t)=(\x01  t te05656 extt05texxt0)") ... It means that pageinspect tries to print stored gtrgm values as text, and I believe that's the third problem here. Moreover, for the point_ops class opcintype is point, but opckeytype is box, thus indexes test_gist_idx and test_gist_idx_inc used in the test in fact contain boxes, not points. So the fixed gist_page_items() produces different output even for existing test cases. (Please look at the patch attached.) I'm somewhat confused with the output: (p)=((185,185),(1,1)) (Maybe add more parentheses around val to get "(p)=(((185,185),(1,1)))", not sure about that.) But I think the current gist_page_items() output is not correct and should be fixed anyway. Best regards, Alexander --------------7qs8UrTHzTdwCytuigk2SQOQ Content-Type: text/x-patch; charset=UTF-8; name="v4-01-fix-gist_page_items-for-index-with-INCLUDE-and-diff-storage.patch" Content-Disposition: attachment; filename*0="v4-01-fix-gist_page_items-for-index-with-INCLUDE-and-diff-st"; filename*1="orage.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvZ2lzdC5vdXQgYi9j b250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2dpc3Qub3V0CmluZGV4IDQ2MGJlZjMwMzcu LjVhYjA5ZmJmMmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQv Z2lzdC5vdXQKKysrIGIvY29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9naXN0Lm91dApA QCAtMzEsMjQgKzMxLDI0IEBAIFNFTEVDVCAqIEZST00gZ2lzdF9wYWdlX29wYXF1ZV9pbmZv KGdldF9yYXdfcGFnZSgndGVzdF9naXN0X2lkeCcsIDIpKTsKIAogQ09NTUlUOwogU0VMRUNU ICogRlJPTSBnaXN0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0X2dpc3RfaWR4Jywg MCksICd0ZXN0X2dpc3RfaWR4Jyk7Ci0gaXRlbW9mZnNldCB8ICAgY3RpZCAgICB8IGl0ZW1s ZW4gfCBkZWFkIHwgICAgICAga2V5cyAgICAgICAgCi0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgMSB8 ICgxLDY1NTM1KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoMTg1LDE4NSkpCi0gICAgICAg ICAgMiB8ICgyLDY1NTM1KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoMzcwLDM3MCkpCi0g ICAgICAgICAgMyB8ICgzLDY1NTM1KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoNTU1LDU1 NSkpCi0gICAgICAgICAgNCB8ICg0LDY1NTM1KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgo NzQwLDc0MCkpCi0gICAgICAgICAgNSB8ICg1LDY1NTM1KSB8ICAgICAgNDAgfCBmICAgIHwg KHApPSgoODcwLDg3MCkpCi0gICAgICAgICAgNiB8ICg2LDY1NTM1KSB8ICAgICAgNDAgfCBm ICAgIHwgKHApPSgoMTAwMCwxMDAwKSkKKyBpdGVtb2Zmc2V0IHwgICBjdGlkICAgIHwgaXRl bWxlbiB8IGRlYWQgfCAgICAgICAgICAgIGtleXMgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgIDEgfCAoMSw2NTUzNSkgfCAgICAgIDQwIHwgZiAgICB8IChw KT0oKDE4NSwxODUpLCgxLDEpKQorICAgICAgICAgIDIgfCAoMiw2NTUzNSkgfCAgICAgIDQw IHwgZiAgICB8IChwKT0oKDM3MCwzNzApLCgxODYsMTg2KSkKKyAgICAgICAgICAzIHwgKDMs NjU1MzUpIHwgICAgICA0MCB8IGYgICAgfCAocCk9KCg1NTUsNTU1KSwoMzcxLDM3MSkpCisg ICAgICAgICAgNCB8ICg0LDY1NTM1KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoNzQwLDc0 MCksKDU1Niw1NTYpKQorICAgICAgICAgIDUgfCAoNSw2NTUzNSkgfCAgICAgIDQwIHwgZiAg ICB8IChwKT0oKDg3MCw4NzApLCg3NDEsNzQxKSkKKyAgICAgICAgICA2IHwgKDYsNjU1MzUp IHwgICAgICA0MCB8IGYgICAgfCAocCk9KCgxMDAwLDEwMDApLCg4NzEsODcxKSkKICg2IHJv d3MpCiAKIFNFTEVDVCAqIEZST00gZ2lzdF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVz dF9naXN0X2lkeCcsIDEpLCAndGVzdF9naXN0X2lkeCcpIExJTUlUIDU7Ci0gaXRlbW9mZnNl dCB8IGN0aWQgIHwgaXRlbWxlbiB8IGRlYWQgfCAgICBrZXlzICAgICAKLS0tLS0tLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLQotICAgICAgICAgIDEg fCAoMCwxKSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoMSwxKSkKLSAgICAgICAgICAyIHwg KDAsMikgfCAgICAgIDQwIHwgZiAgICB8IChwKT0oKDIsMikpCi0gICAgICAgICAgMyB8ICgw LDMpIHwgICAgICA0MCB8IGYgICAgfCAocCk9KCgzLDMpKQotICAgICAgICAgIDQgfCAoMCw0 KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoNCw0KSkKLSAgICAgICAgICA1IHwgKDAsNSkg fCAgICAgIDQwIHwgZiAgICB8IChwKT0oKDUsNSkpCisgaXRlbW9mZnNldCB8IGN0aWQgIHwg aXRlbWxlbiB8IGRlYWQgfCAgICAgICBrZXlzICAgICAgICAKKy0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgIDEg fCAoMCwxKSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoMSwxKSwoMSwxKSkKKyAgICAgICAg ICAyIHwgKDAsMikgfCAgICAgIDQwIHwgZiAgICB8IChwKT0oKDIsMiksKDIsMikpCisgICAg ICAgICAgMyB8ICgwLDMpIHwgICAgICA0MCB8IGYgICAgfCAocCk9KCgzLDMpLCgzLDMpKQor ICAgICAgICAgIDQgfCAoMCw0KSB8ICAgICAgNDAgfCBmICAgIHwgKHApPSgoNCw0KSwoNCw0 KSkKKyAgICAgICAgICA1IHwgKDAsNSkgfCAgICAgIDQwIHwgZiAgICB8IChwKT0oKDUsNSks KDUsNSkpCiAoNSByb3dzKQogCiAtLSBnaXN0X3BhZ2VfaXRlbXNfYnl0ZWEgcHJpbnRzIHRo ZSByYXcga2V5IGRhdGEgYXMgYSBieXRlYS4gVGhlIG91dHB1dCBvZiB0aGF0IGlzCkBAIC0x MDcsNCArMTA3LDIzIEBAIFNFTEVDVCBnaXN0X3BhZ2Vfb3BhcXVlX2luZm8oZGVjb2RlKHJl cGVhdCgnMDAnLCA6YmxvY2tfc2l6ZSksICdoZXgnKSk7CiAgCiAoMSByb3cpCiAKKy0tIFRl c3QgZ2lzdF9wYWdlX2l0ZW1zIHdpdGggaW5jbHVkZWQgY29sdW1ucy4KKy0tIE5vbi1sZWFm IHBhZ2VzIGhhdmUgb25seSB0aGUga2V5IGF0dHJpYnV0ZXMsIGFuZCBsZWFmIHBhZ2VzIGhh dmUKKy0tIHRoZSBpbmNsdWRlZCBhdHRyaWJ1dGVzLgorQUxURVIgVEFCTEUgdGVzdF9naXN0 IEFERCBDT0xVTU4gaSBpbnQ7CitDUkVBVEUgSU5ERVggdGVzdF9naXN0X2lkeF9pbmMgT04g dGVzdF9naXN0IFVTSU5HIGdpc3QgKHApIElOQ0xVREUgKHQsIGkpOworU0VMRUNUICogRlJP TSBnaXN0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0X2dpc3RfaWR4X2luYycsIDAp LCAndGVzdF9naXN0X2lkeF9pbmMnKQorICAgV0hFUkUgaXRlbW9mZnNldCA9IDE7CisgaXRl bW9mZnNldCB8ICAgY3RpZCAgICB8IGl0ZW1sZW4gfCBkZWFkIHwgICAgICAgICBrZXlzICAg ICAgICAgIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAxIHwgKDEsNjU1MzUpIHwgICAgICA0 MCB8IGYgICAgfCAocCk9KCgxMzUsMTM1KSwoMSwxKSkKKygxIHJvdykKKworU0VMRUNUICog RlJPTSBnaXN0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0X2dpc3RfaWR4X2luYycs IDEpLCAndGVzdF9naXN0X2lkeF9pbmMnKQorICAgV0hFUkUgaXRlbW9mZnNldCA9IDE7Cisg aXRlbW9mZnNldCB8IGN0aWQgIHwgaXRlbWxlbiB8IGRlYWQgfCAgICAgICAgICAgICAgICAg ICAgICAgIGtleXMgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgIDEgfCAoMCwxKSB8ICAgICAgNTYgfCBm ICAgIHwgKHApIElOQ0xVREUgKHQsIGkpPSgoMSwxKSwoMSwxKSkgSU5DTFVERSAoMSwgbnVs bCkKKygxIHJvdykKKwogRFJPUCBUQUJMRSB0ZXN0X2dpc3Q7CmRpZmYgLS1naXQgYS9jb250 cmliL3BhZ2VpbnNwZWN0L2dpc3RmdW5jcy5jIGIvY29udHJpYi9wYWdlaW5zcGVjdC9naXN0 ZnVuY3MuYwppbmRleCAzZGNhN2YxMzE4Li5hNTFjZGIzMmEwIDEwMDY0NAotLS0gYS9jb250 cmliL3BhZ2VpbnNwZWN0L2dpc3RmdW5jcy5jCisrKyBiL2NvbnRyaWIvcGFnZWluc3BlY3Qv Z2lzdGZ1bmNzLmMKQEAgLTIxLDggKzIxLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9pdGVt cHRyLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgotI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xz bi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgorI2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Zh cmxlbmEuaCIKIAogUEdfRlVOQ1RJT05fSU5GT19WMShnaXN0X3BhZ2Vfb3BhcXVlX2luZm8p OwpAQCAtMTk4LDkgKzIwMCwxMyBAQCBnaXN0X3BhZ2VfaXRlbXMoUEdfRlVOQ1RJT05fQVJH UykKIAlPaWQJCQlpbmRleFJlbGlkID0gUEdfR0VUQVJHX09JRCgxKTsKIAlSZXR1cm5TZXRJ bmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CiAJ UmVsYXRpb24JaW5kZXhSZWw7CisJVHVwbGVEZXNjCXR1cGRlc2M7CiAJUGFnZQkJcGFnZTsK Kwl1aW50MTYJCWZsYWdiaXRzOworCWJpdHMxNgkJcHJpbnRmbGFncyA9IDA7CiAJT2Zmc2V0 TnVtYmVyIG9mZnNldDsKIAlPZmZzZXROdW1iZXIgbWF4b2ZmID0gSW52YWxpZE9mZnNldE51 bWJlcjsKKwljaGFyCSAgICppbmRleF9jb2x1bW5zOwogCiAJaWYgKCFzdXBlcnVzZXIoKSkK IAkJZXJlcG9ydChFUlJPUiwKQEAgLTIyNiw2ICsyMzIsMjcgQEAgZ2lzdF9wYWdlX2l0ZW1z KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAJfQogCisJZmxhZ2Jp dHMgPSBHaXN0UGFnZUdldE9wYXF1ZShwYWdlKS0+ZmxhZ3M7CisKKwkvKgorCSAqIEluY2x1 ZGVkIGF0dHJpYnV0ZXMgYXJlIGFkZGVkIHdoZW4gZGVhbGluZyB3aXRoIGxlYWYgcGFnZXMs IGRpc2NhcmRlZAorCSAqIGZvciBub24tbGVhZiBwYWdlcyBhcyB0aGVzZSBpbmNsdWRlIG9u bHkgZGF0YSBmb3Iga2V5IGF0dHJpYnV0ZXMuCisJICovCisJcHJpbnRmbGFncyB8PSBSVUxF X0lOREVYREVGX1BSRVRUWTsKKwlpZiAoZmxhZ2JpdHMgJiBGX0xFQUYpCisJeworCQl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihpbmRleFJlbCk7CisJfQorCWVsc2UKKwl7CisJCXR1 cGRlc2MgPSBDcmVhdGVUdXBsZURlc2NDb3B5KFJlbGF0aW9uR2V0RGVzY3IoaW5kZXhSZWwp KTsKKwkJdHVwZGVzYy0+bmF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRy aWJ1dGVzKGluZGV4UmVsKTsKKwkJcHJpbnRmbGFncyB8PSBSVUxFX0lOREVYREVGX0tFWVNf T05MWTsKKwl9CisKKwlpbmRleF9jb2x1bW5zID0gcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnNf ZXh0ZW5kZWQoaW5kZXhSZWxpZCwKKwkJCQkJCQkJCQkJCQkgcHJpbnRmbGFncyk7CisKIAkv KiBBdm9pZCBib2d1cyBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKCkgY2FsbCB3aXRoIGRlbGV0 ZWQgcGFnZXMgKi8KIAlpZiAoR2lzdFBhZ2VJc0RlbGV0ZWQocGFnZSkpCiAJCWVsb2coTk9U SUNFLCAicGFnZSBpcyBkZWxldGVkIik7CkBAIC0yNDIsNyArMjY5LDggQEAgZ2lzdF9wYWdl X2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCUluZGV4VHVwbGUJaXR1cDsKIAkJRGF0dW0J CWl0dXBfdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKIAkJYm9vbAkJaXR1cF9pc251bGxbSU5E RVhfTUFYX0tFWVNdOwotCQljaGFyCSAgICprZXlfZGVzYzsKKwkJU3RyaW5nSW5mb0RhdGEg YnVmOworCQlpbnQJCQlpOwogCiAJCWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZzZXQp OwogCkBAIC0yNTEsNyArMjc5LDcgQEAgZ2lzdF9wYWdlX2l0ZW1zKFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAkJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpZCk7CiAK LQkJaW5kZXhfZGVmb3JtX3R1cGxlKGl0dXAsIFJlbGF0aW9uR2V0RGVzY3IoaW5kZXhSZWwp LAorCQlpbmRleF9kZWZvcm1fdHVwbGUoaXR1cCwgdHVwZGVzYywKIAkJCQkJCSAgIGl0dXBf dmFsdWVzLCBpdHVwX2lzbnVsbCk7CiAKIAkJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVs bHMpKTsKQEAgLTI2MSw5ICsyODksNDEgQEAgZ2lzdF9wYWdlX2l0ZW1zKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0oKGludCkgSW5kZXhUdXBsZVNp emUoaXR1cCkpOwogCQl2YWx1ZXNbM10gPSBCb29sR2V0RGF0dW0oSXRlbUlkSXNEZWFkKGlk KSk7CiAKLQkJa2V5X2Rlc2MgPSBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbihpbmRleFJl bCwgaXR1cF92YWx1ZXMsIGl0dXBfaXNudWxsKTsKLQkJaWYgKGtleV9kZXNjKQotCQkJdmFs dWVzWzRdID0gQ1N0cmluZ0dldFRleHREYXR1bShrZXlfZGVzYyk7CisJCWlmIChpbmRleF9j b2x1bW5zKQorCQl7CisJCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIiglcyk9KCIsIGluZGV4X2NvbHVtbnMpOworCisJCQlmb3IgKGkgPSAw OyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwkJCXsKKwkJCQljaGFyCSAgICp2YWw7CisK KwkJCQlpZiAoaXR1cF9pc251bGxbaV0pCisJCQkJCXZhbCA9ICJudWxsIjsKKwkJCQllbHNl CisJCQkJeworCQkJCQlPaWQJCQlmb3V0b2lkOworCQkJCQlib29sCQl0eXBpc3ZhcmxlbmE7 CisJCQkJCU9pZAkJCXR5cG9pZDsKKworCQkJCQl0eXBvaWQgPSB0dXBkZXNjLT5hdHRyc1tp XS5hdHR0eXBpZDsKKwkJCQkJZ2V0VHlwZU91dHB1dEluZm8odHlwb2lkLCAmZm91dG9pZCwg JnR5cGlzdmFybGVuYSk7CisJCQkJCXZhbCA9IE9pZE91dHB1dEZ1bmN0aW9uQ2FsbChmb3V0 b2lkLCBpdHVwX3ZhbHVlc1tpXSk7CisJCQkJfQorCisJCQkJaWYgKGkgPT0gSW5kZXhSZWxh dGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhpbmRleFJlbCkpCisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikgSU5DTFVERSAoIik7CisJCQkJZWxzZSBpZiAoaSA+ IDApCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiwgIik7CisKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsIHZhbCk7CisJCQl9CisKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZidWYsICcpJyk7CisKKwkJCXZhbHVlc1s0XSA9IENTdHJpbmdHZXRU ZXh0RGF0dW0oYnVmLmRhdGEpOworCQkJbnVsbHNbNF0gPSBmYWxzZTsKKwkJfQogCQllbHNl CiAJCXsKIAkJCXZhbHVlc1s0XSA9IChEYXR1bSkgMDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGFnZWluc3BlY3Qvc3FsL2dpc3Quc3FsIGIvY29udHJpYi9wYWdlaW5zcGVjdC9zcWwvZ2lz dC5zcWwKaW5kZXggNDc4N2I3ODRhNC4uZmI5MWFhNDhjZCAxMDA2NDQKLS0tIGEvY29udHJp Yi9wYWdlaW5zcGVjdC9zcWwvZ2lzdC5zcWwKKysrIGIvY29udHJpYi9wYWdlaW5zcGVjdC9z cWwvZ2lzdC5zcWwKQEAgLTUyLDQgKzUyLDE0IEBAIFNFTEVDVCBnaXN0X3BhZ2VfaXRlbXNf Ynl0ZWEoZGVjb2RlKHJlcGVhdCgnMDAnLCA6YmxvY2tfc2l6ZSksICdoZXgnKSk7CiBTRUxF Q1QgZ2lzdF9wYWdlX2l0ZW1zKGRlY29kZShyZXBlYXQoJzAwJywgOmJsb2NrX3NpemUpLCAn aGV4JyksICd0ZXN0X2dpc3RfaWR4Jzo6cmVnY2xhc3MpOwogU0VMRUNUIGdpc3RfcGFnZV9v cGFxdWVfaW5mbyhkZWNvZGUocmVwZWF0KCcwMCcsIDpibG9ja19zaXplKSwgJ2hleCcpKTsK IAorLS0gVGVzdCBnaXN0X3BhZ2VfaXRlbXMgd2l0aCBpbmNsdWRlZCBjb2x1bW5zLgorLS0g Tm9uLWxlYWYgcGFnZXMgaGF2ZSBvbmx5IHRoZSBrZXkgYXR0cmlidXRlcywgYW5kIGxlYWYg cGFnZXMgaGF2ZQorLS0gdGhlIGluY2x1ZGVkIGF0dHJpYnV0ZXMuCitBTFRFUiBUQUJMRSB0 ZXN0X2dpc3QgQUREIENPTFVNTiBpIGludDsKK0NSRUFURSBJTkRFWCB0ZXN0X2dpc3RfaWR4 X2luYyBPTiB0ZXN0X2dpc3QgVVNJTkcgZ2lzdCAocCkgSU5DTFVERSAodCwgaSk7CitTRUxF Q1QgKiBGUk9NIGdpc3RfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3RfZ2lzdF9pZHhf aW5jJywgMCksICd0ZXN0X2dpc3RfaWR4X2luYycpCisgICBXSEVSRSBpdGVtb2Zmc2V0ID0g MTsKK1NFTEVDVCAqIEZST00gZ2lzdF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdF9n aXN0X2lkeF9pbmMnLCAxKSwgJ3Rlc3RfZ2lzdF9pZHhfaW5jJykKKyAgIFdIRVJFIGl0ZW1v ZmZzZXQgPSAxOworCiBEUk9QIFRBQkxFIHRlc3RfZ2lzdDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCBlOTNkNjZhN2VjLi42ZDY3MzQ5M2NiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xMjE1LDYgKzEyMTUsMjIgQEAgcGdfZ2V0X2luZGV4 ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KQogCQkJCQkJCQkgIHBy ZXR0eUZsYWdzLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNpb24sIGV4dGVuc2li bGUgd2l0aCBmbGFncyB0byBjb250cm9sIGl0cyBiZWhhdmlvciAqLworY2hhciAqCitwZ19n ZXRfaW5kZXhkZWZfY29sdW1uc19leHRlbmRlZChPaWQgaW5kZXhyZWxpZCwgYml0czE2IGZs YWdzKQoreworCWJvb2wJCXByZXR0eSA9ICgoZmxhZ3MgJiBSVUxFX0lOREVYREVGX1BSRVRU WSkgIT0gMCk7CisJYm9vbAkJa2V5c19vbmx5ID0gKChmbGFncyAmIFJVTEVfSU5ERVhERUZf S0VZU19PTkxZKSAhPSAwKTsKKwlpbnQJCQlwcmV0dHlGbGFnczsKKworCXByZXR0eUZsYWdz ID0gR0VUX1BSRVRUWV9GTEFHUyhwcmV0dHkpOworCisJcmV0dXJuIHBnX2dldF9pbmRleGRl Zl93b3JrZXIoaW5kZXhyZWxpZCwgMCwgTlVMTCwKKwkJCQkJCQkJICB0cnVlLCBrZXlzX29u bHksCisJCQkJCQkJCSAgZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkgIHByZXR0eUZsYWdzLCBm YWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGFu IGluZGV4IGRlZmluaXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCAxYTQy ZDlmMzliLi5iMDA2ZDlkNDc1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMjAsOSAr MjAsMTQgQEAKIHN0cnVjdCBQbGFuOwkJCQkJLyogYXZvaWQgaW5jbHVkaW5nIHBsYW5ub2Rl cy5oIGhlcmUgKi8KIHN0cnVjdCBQbGFubmVkU3RtdDsKIAorLyogRmxhZ3MgZm9yIHBnX2dl dF9pbmRleGRlZl9jb2x1bW5zX2V4dGVuZGVkKCkgKi8KKyNkZWZpbmUgUlVMRV9JTkRFWERF Rl9QUkVUVFkJCTB4MDEKKyNkZWZpbmUgUlVMRV9JTkRFWERFRl9LRVlTX09OTFkJCTB4MDIJ LyogaWdub3JlIGluY2x1ZGVkIGF0dHJpYnV0ZXMgKi8KIAogZXh0ZXJuIGNoYXIgKnBnX2dl dF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dl dF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CitleHRl cm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnNfZXh0ZW5kZWQoT2lkIGluZGV4cmVs aWQsCisJCQkJCQkJCQkJCSAgYml0czE2IGZsYWdzKTsKIGV4dGVybiBjaGFyICpwZ19nZXRf cXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7CiAKIGV4dGVybiBjaGFyICpw Z19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpOwo= --------------7qs8UrTHzTdwCytuigk2SQOQ--