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 1rNGO5-00AWUZ-E5 for pgsql-bugs@arkaria.postgresql.org; Tue, 09 Jan 2024 17:59:43 +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 1rNGO4-00Eks7-1E for pgsql-bugs@arkaria.postgresql.org; Tue, 09 Jan 2024 17:59:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rNGO3-00Ekry-CL for pgsql-bugs@lists.postgresql.org; Tue, 09 Jan 2024 17:59:39 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rNGNz-000h5b-1l for pgsql-bugs@postgresql.org; Tue, 09 Jan 2024 17:59:37 +0000 Received: from [192.168.1.118] (mm-184-23-215-37.mfilial.dynamic.pppoe.byfly.by [37.215.23.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: m.zhilin@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 23B9CE21013; Tue, 9 Jan 2024 20:59:27 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1704823171; bh=qFIxr240D+QZvgWLo3FZGAD2ysgtpO6daqNHoMviVWs=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=xDHM7ZoaHBrJgDtwqCeNfGnLYqnkYTl3sOCIizylsACKMP7zzv/Ay6VM+AhNB45LC aalBRGSEdeN+RL8DjX4ELLbntDizDB1Jo7zhF441DZ9CnWgDh2nD7r07BB7hqS0U4/ 6zdzmGQ3pQtqJuDjgDQOHyw2he6sUHtcUBpsISIAtIAIiZyk/0xwChDqeR3AJzRbBU tjXO/HDZD7axtBdiWVJfF10XjiKj4C60vTBAJcn6iMb5ceZHZijKJ7WOinweOmqnel U88zfmCjQNHumBV7OcTdNjeZNjY08xeE2qjxwoCgoXykET8ytmKklQJZTlxGSDwws+ zDVZtHQSz/kLQ== Content-Type: multipart/mixed; boundary="------------43TO6604PpmHAYOsNA0hyhtK" Message-ID: <76bc0dc9-4e43-4cd8-8eec-249b254ed1c9@postgrespro.ru> Date: Tue, 9 Jan 2024 20:59:17 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [BUG] false positive in bt_index_check in case of short 4B varlena datum Content-Language: en-US To: "Andrey M. Borodin" , Alexander Lakhin , pgsql-bugs@postgresql.org Cc: y sokolov References: <7bdbe559-d61a-4ae4-a6e1-48abdf3024cc@postgrespro.ru> <0FDE2089-D306-4CBB-AD1F-EC4B419E3B33@yandex-team.ru> <49BBA065-4C9A-4E50-9048-B457907FF219@yandex-team.ru> From: Michael Zhilin In-Reply-To: <49BBA065-4C9A-4E50-9048-B457907FF219@yandex-team.ru> 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. --------------43TO6604PpmHAYOsNA0hyhtK Content-Type: multipart/alternative; boundary="------------SPO0vh9ePthXNHqryaqe0lFM" --------------SPO0vh9ePthXNHqryaqe0lFM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, Thank you, Andrey, for review and advice! Here is rebased version (v2) of patch supposed to make CF bot happy. Best regards,   Michael On 1/8/24 17:34, Andrey M. Borodin wrote: > Hi Alexander! > > I think both cases are very interesting and deserve two separate bug items. > >> On 14 Dec 2023, at 22:17, Alexander Lakhin wrote: >> >> >> By changing the storage mode for a column, you can also get another error: >> CREATE TABLE t(f1 text); >> CREATE INDEX t_idx ON t(f1); >> INSERT INTO t VALUES(repeat('1234567890', 1000)); >> ALTER TABLE t ALTER COLUMN f1 SET STORAGE plain; >> >> CREATE EXTENSION amcheck; >> SELECT bt_index_check('t_idx', true); >> >> ERROR: index row requires 10016 bytes, maximum size is 8191 >> > I think In this case we should warn user that index contains tuples with datums that are not insertable anymore. And abort heapallindexed. > > >> On 8 Jan 2024, at 00:00, Alexander Lakhin wrote: >> >> What is your opinion regarding similar failures, which are not addressed >> by the patch? Besides the case shown above, there is another one: >> CREATE TABLE tbl(i int4, t text); >> ALTER TABLE tbl ALTER COLUMN t SET STORAGE plain; >> CREATE INDEX tbl_idx ON tbl (t, i) WITH (fillfactor = 10); >> INSERT INTO tbl SELECT g, repeat('Test', 250) FROM generate_series(1, 130) g; >> ALTER TABLE tbl ALTER COLUMN t SET STORAGE extended; >> >> CREATE EXTENSION amcheck; >> SELECT bt_index_check('tbl_idx', true); >> >> ERROR: heap tuple (0,1) from table "tbl" lacks matching index tuple within index "tbl_idx" >> HINT: Retrying verification using the function bt_index_parent_check() might provide a more specific error. > IMO In this case we should handle VARATT_IS_EXTENDED in bt_normalize_tuple(). > > BTW CI fails of the original patch ITT are related to the fact that COPY in\out file is created in PG_ABS_SRCDIR instead of PG_ABS_BUILDDIR. In an off-list conversation I recommended Michael to mimic tests regress/largeobject.sql. Though, there might be better ideas. > > Thanks! > > > Best regards, Andrey Borodin. > -- Michael Zhilin Postgres Professional +7(925)3366270 https://www.postgrespro.ru --------------SPO0vh9ePthXNHqryaqe0lFM Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi,

Thank you, Andrey, for review and advice!

Here is rebased version (v2) of patch supposed to make CF bot happy.

Best regards,
  Michael

On 1/8/24 17:34, Andrey M. Borodin wrote:
Hi Alexander!

I think both cases are very interesting and deserve two separate bug items.

On 14 Dec 2023, at 22:17, Alexander Lakhin <exclusion@gmail.com> wrote:


By changing the storage mode for a column, you can also get another error:
CREATE TABLE t(f1 text);
CREATE INDEX t_idx ON t(f1);
INSERT INTO t VALUES(repeat('1234567890', 1000));
ALTER TABLE t ALTER COLUMN f1 SET STORAGE plain;

CREATE EXTENSION amcheck;
SELECT bt_index_check('t_idx', true);

ERROR:  index row requires 10016 bytes, maximum size is 8191

I think In this case we should warn user that index contains tuples with datums that are not insertable anymore. And abort heapallindexed.


On 8 Jan 2024, at 00:00, Alexander Lakhin <exclusion@gmail.com> wrote:

What is your opinion regarding similar failures, which are not addressed
by the patch? Besides the case shown above, there is another one:
CREATE TABLE tbl(i int4, t text);
ALTER TABLE tbl ALTER COLUMN t SET STORAGE plain;
CREATE INDEX tbl_idx ON tbl (t, i) WITH (fillfactor = 10);
INSERT INTO tbl SELECT g, repeat('Test', 250) FROM generate_series(1, 130) g;
ALTER TABLE tbl ALTER COLUMN t SET STORAGE extended;

CREATE EXTENSION amcheck;
SELECT bt_index_check('tbl_idx', true);

ERROR:  heap tuple (0,1) from table "tbl" lacks matching index tuple within index "tbl_idx"
HINT:  Retrying verification using the function bt_index_parent_check() might provide a more specific error.
IMO In this case we should handle VARATT_IS_EXTENDED in bt_normalize_tuple().

BTW CI fails of the original patch ITT are related to the fact that COPY in\out file is created in PG_ABS_SRCDIR instead of PG_ABS_BUILDDIR. In an off-list conversation I recommended Michael to mimic tests regress/largeobject.sql. Though, there might be better ideas.

Thanks!


Best regards, Andrey Borodin.


-- 
Michael Zhilin
Postgres Professional
+7(925)3366270
https://www.postgrespro.ru
--------------SPO0vh9ePthXNHqryaqe0lFM-- --------------43TO6604PpmHAYOsNA0hyhtK Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-contrib-amcheck-must-support-different-header-siz.patch" Content-Disposition: attachment; filename*0="v2-0001-contrib-amcheck-must-support-different-header-siz.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhZTM4NTBlNjRlNzVjMTEzN2FjY2UxYTIwZjI3NmZhOWE0Y2QwZGJlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIFpoaWxpbiA8bWl6aGthQEZyZWVCU0Qu b3JnPgpEYXRlOiBUaHUsIDE0IERlYyAyMDIzIDE2OjA4OjE1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2Ml0gY29udHJpYi9hbWNoZWNrOiBtdXN0IHN1cHBvcnQgZGlmZmVyZW50IGhlYWRl ciBzaXplIG9mCiBzaG9ydCB2YXJsZW5hIGRhdHVtCgotLS0KIGNvbnRyaWIvYW1jaGVjay9l eHBlY3RlZC9jaGVja19idHJlZS5vdXQgfCAxOSArKysrKysrKysrKysrCiBjb250cmliL2Ft Y2hlY2svc3FsL2NoZWNrX2J0cmVlLnNxbCAgICAgIHwgMTcgKysrKysrKysrKysKIGNvbnRy aWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgfCAzNiArKysrKysrKysrKysr KysrKysrKy0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tf YnRyZWUub3V0IGIvY29udHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNrX2J0cmVlLm91dApp bmRleCA4NmIzOGQ5M2Y0MS4uZTM3OTAxYzQwMjggMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1j aGVjay9leHBlY3RlZC9jaGVja19idHJlZS5vdXQKKysrIGIvY29udHJpYi9hbWNoZWNrL2V4 cGVjdGVkL2NoZWNrX2J0cmVlLm91dApAQCAtMSwzICsxLDUgQEAKKy0tIGRpcmVjdG9yeSBw YXRocyBhcmUgcGFzc2VkIHRvIHVzIGluIGVudmlyb25tZW50IHZhcmlhYmxlcworXGdldGVu diBhYnNfYnVpbGRkaXIgUEdfQUJTX0JVSUxERElSCiBDUkVBVEUgVEFCTEUgYnR0ZXN0X2Eo aWQgaW50OCk7CiBDUkVBVEUgVEFCTEUgYnR0ZXN0X2IoaWQgaW50OCk7CiBDUkVBVEUgVEFC TEUgYnR0ZXN0X211bHRpKGlkIGludDgsIGRhdGEgaW50OCk7CkBAIC0yNDAsNiArMjQyLDIy IEBAIFNFTEVDVCBidF9pbmRleF9jaGVjaygnYnR0ZXN0X3VuaXF1ZV9udWxsc19iX2NfaWR4 JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlCiAgCiAoMSByb3cpCiAKKy0tCistLSBC VUc6IG11c3Qgc3VwcG9ydCBkaWZmZXJlbnQgaGVhZGVyIHNpemUgb2Ygc2hvcnQgdmFybGVu YSBkYXR1bQorLS0KK0NSRUFURSBUQUJMRSB2YXJsZW5hX2J1ZyAodiB0ZXh0KTsKK0FMVEVS IFRBQkxFIHZhcmxlbmFfYnVnIEFMVEVSIGNvbHVtbiB2IFNFVCBzdG9yYWdlIHBsYWluOwor SU5TRVJUIElOVE8gdmFybGVuYV9idWcgVkFMVUVTICgneCcpOworXHNldCBmaWxlbmFtZSA6 YWJzX2J1aWxkZGlyICcvcmVzdWx0cy92YXJsZW5hX2J1Zy5kbXAnCitDT1BZIHZhcmxlbmFf YnVnIFRPIDonZmlsZW5hbWUnOworQ09QWSB2YXJsZW5hX2J1ZyBGUk9NIDonZmlsZW5hbWUn OworQ1JFQVRFIElOREVYIHZhcmxlbmFfYnVnX2lkeCBvbiB2YXJsZW5hX2J1Zyh2KTsKK1NF TEVDVCBidF9pbmRleF9jaGVjaygndmFybGVuYV9idWdfaWR4JywgdHJ1ZSk7CisgYnRfaW5k ZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKIC0tIGNsZWFudXAK IERST1AgVEFCTEUgYnR0ZXN0X2E7CiBEUk9QIFRBQkxFIGJ0dGVzdF9iOwpAQCAtMjUwLDMg KzI2OCw0IEBAIERST1AgRlVOQ1RJT04gaWZ1bihpbnQ4KTsKIERST1AgVEFCTEUgYnR0ZXN0 X3VuaXF1ZV9udWxsczsKIERST1AgT1dORUQgQlkgcmVncmVzc19idHRlc3Rfcm9sZTsgLS0g cGVybWlzc2lvbnMKIERST1AgUk9MRSByZWdyZXNzX2J0dGVzdF9yb2xlOworRFJPUCBUQUJM RSB2YXJsZW5hX2J1ZzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tf YnRyZWUuc3FsIGIvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19idHJlZS5zcWwKaW5kZXgg YWE0NjFmN2ZiOTcuLmU2N2ViNjM1MmY4IDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2sv c3FsL2NoZWNrX2J0cmVlLnNxbAorKysgYi9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2J0 cmVlLnNxbApAQCAtMSwzICsxLDYgQEAKKy0tIGRpcmVjdG9yeSBwYXRocyBhcmUgcGFzc2Vk IHRvIHVzIGluIGVudmlyb25tZW50IHZhcmlhYmxlcworXGdldGVudiBhYnNfYnVpbGRkaXIg UEdfQUJTX0JVSUxERElSCisKIENSRUFURSBUQUJMRSBidHRlc3RfYShpZCBpbnQ4KTsKIENS RUFURSBUQUJMRSBidHRlc3RfYihpZCBpbnQ4KTsKIENSRUFURSBUQUJMRSBidHRlc3RfbXVs dGkoaWQgaW50OCwgZGF0YSBpbnQ4KTsKQEAgLTE0OCw2ICsxNTEsMTkgQEAgU0VMRUNUIGJ0 X2luZGV4X2NoZWNrKCdidHRlc3RfdW5pcXVlX251bGxzX2Nfa2V5JywgaGVhcGFsbGluZGV4 ZWQgPT4gdHJ1ZSwgY2hlY2sKIENSRUFURSBJTkRFWCBvbiBidHRlc3RfdW5pcXVlX251bGxz IChiLGMpOwogU0VMRUNUIGJ0X2luZGV4X2NoZWNrKCdidHRlc3RfdW5pcXVlX251bGxzX2Jf Y19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsK IAorLS0KKy0tIEJVRzogbXVzdCBzdXBwb3J0IGRpZmZlcmVudCBoZWFkZXIgc2l6ZSBvZiBz aG9ydCB2YXJsZW5hIGRhdHVtCistLQorCitDUkVBVEUgVEFCTEUgdmFybGVuYV9idWcgKHYg dGV4dCk7CitBTFRFUiBUQUJMRSB2YXJsZW5hX2J1ZyBBTFRFUiBjb2x1bW4gdiBTRVQgc3Rv cmFnZSBwbGFpbjsKK0lOU0VSVCBJTlRPIHZhcmxlbmFfYnVnIFZBTFVFUyAoJ3gnKTsKK1xz ZXQgZmlsZW5hbWUgOmFic19idWlsZGRpciAnL3Jlc3VsdHMvdmFybGVuYV9idWcuZG1wJwor Q09QWSB2YXJsZW5hX2J1ZyBUTyA6J2ZpbGVuYW1lJzsKK0NPUFkgdmFybGVuYV9idWcgRlJP TSA6J2ZpbGVuYW1lJzsKK0NSRUFURSBJTkRFWCB2YXJsZW5hX2J1Z19pZHggb24gdmFybGVu YV9idWcodik7CitTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ3ZhcmxlbmFfYnVnX2lkeCcsIHRy dWUpOworCiAtLSBjbGVhbnVwCiBEUk9QIFRBQkxFIGJ0dGVzdF9hOwogRFJPUCBUQUJMRSBi dHRlc3RfYjsKQEAgLTE1OCwzICsxNzQsNCBAQCBEUk9QIEZVTkNUSU9OIGlmdW4oaW50OCk7 CiBEUk9QIFRBQkxFIGJ0dGVzdF91bmlxdWVfbnVsbHM7CiBEUk9QIE9XTkVEIEJZIHJlZ3Jl c3NfYnR0ZXN0X3JvbGU7IC0tIHBlcm1pc3Npb25zCiBEUk9QIFJPTEUgcmVncmVzc19idHRl c3Rfcm9sZTsKK0RST1AgVEFCTEUgdmFybGVuYV9idWc7CmRpZmYgLS1naXQgYS9jb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRy ZWUuYwppbmRleCA5MWNhYTUzZGQ4Yi4uZTdmMDFjMmFkZGIgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJpYi9hbWNoZWNrL3Zlcmlm eV9uYnRyZWUuYwpAQCAtMjk0Miw3ICsyOTQyLDcgQEAgYnRfbm9ybWFsaXplX3R1cGxlKEJ0 cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAlUdXBsZURlc2MJdHVw bGVEZXNjcmlwdG9yID0gUmVsYXRpb25HZXREZXNjcihzdGF0ZS0+cmVsKTsKIAlEYXR1bQkJ bm9ybWFsaXplZFtJTkRFWF9NQVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9L RVlTXTsKLQlib29sCQl0b2FzdF9mcmVlW0lOREVYX01BWF9LRVlTXTsKKwlib29sCQluZWVk X2ZyZWVbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWZvcm1uZXd0dXAgPSBmYWxzZTsKIAlJ bmRleFR1cGxlCXJlZm9ybWVkOwogCWludAkJCWk7CkBAIC0yOTYxLDcgKzI5NjEsNyBAQCBi dF9ub3JtYWxpemVfdHVwbGUoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5kZXhUdXBsZSBp dHVwKQogCQlhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGxlRGVzY3JpcHRvciwgaSk7CiAKIAkJ LyogQXNzdW1lIHVudG9hc3RlZC9hbHJlYWR5IG5vcm1hbGl6ZWQgZGF0dW0gaW5pdGlhbGx5 ICovCi0JCXRvYXN0X2ZyZWVbaV0gPSBmYWxzZTsKKwkJbmVlZF9mcmVlW2ldID0gZmFsc2U7 CiAJCW5vcm1hbGl6ZWRbaV0gPSBpbmRleF9nZXRhdHRyKGl0dXAsIGF0dC0+YXR0bnVtLAog CQkJCQkJCQkJICB0dXBsZURlc2NyaXB0b3IsCiAJCQkJCQkJCQkgICZpc251bGxbaV0pOwpA QCAtMjk3Myw2ICsyOTczLDcgQEAgYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tTdGF0 ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkJICogaW5kZXggd2l0aG91dCBmdXJ0aGVy IHByb2Nlc3NpbmcsIHNvIGFuIGV4dGVybmFsIHZhcmxlbmEgaGVhZGVyCiAJCSAqIHNob3Vs ZCBuZXZlciBiZSBlbmNvdW50ZXJlZCBoZXJlCiAJCSAqLworCiAJCWlmIChWQVJBVFRfSVNf RVhURVJOQUwoRGF0dW1HZXRQb2ludGVyKG5vcm1hbGl6ZWRbaV0pKSkKIAkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKQEAgLTI5 ODQsMTEgKzI5ODUsMzIgQEAgYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tTdGF0ZSAq c3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkJewogCQkJZm9ybW5ld3R1cCA9IHRydWU7CiAJ CQlub3JtYWxpemVkW2ldID0gUG9pbnRlckdldERhdHVtKFBHX0RFVE9BU1RfREFUVU0obm9y bWFsaXplZFtpXSkpOwotCQkJdG9hc3RfZnJlZVtpXSA9IHRydWU7CisJCQluZWVkX2ZyZWVb aV0gPSB0cnVlOwogCQl9CisJCS8qCisJCSAqIFNob3J0IHR1cGxlcyBtYXkgaGF2ZSAxQiBv ciA0QiBoZWFkZXIuIENvbnZlcnQgNEIgaGVhZGVyIG9mIHNob3J0CisJCSAqIHR1cGxlcyB0 byAxQgorCQkgKi8KKwkJZWxzZSBpZiAoVkFSQVRUX0NBTl9NQUtFX1NIT1JUKERhdHVtR2V0 UG9pbnRlcihub3JtYWxpemVkW2ldKSkpCisJCXsKKwkJCS8qIGNvbnZlcnQgdG8gc2hvcnQg dmFybGVuYSAqLworCQkJU2l6ZSBsZW4gPSBWQVJBVFRfQ09OVkVSVEVEX1NIT1JUX1NJWkUo RGF0dW1HZXRQb2ludGVyKG5vcm1hbGl6ZWRbaV0pKTsKKwkJCWNoYXIgKmRhdGEgPSBwYWxs b2MobGVuKTsKKworCQkJU0VUX1ZBUlNJWkVfU0hPUlQoZGF0YSwgbGVuKTsKKwkJCW1lbWNw eShkYXRhICsgMSwgVkFSREFUQShEYXR1bUdldFBvaW50ZXIobm9ybWFsaXplZFtpXSkpLCBs ZW4gLSAxKTsKKworCQkJZm9ybW5ld3R1cCA9IHRydWU7CisJCQlub3JtYWxpemVkW2ldID0g UG9pbnRlckdldERhdHVtKGRhdGEpOworCQkJbmVlZF9mcmVlW2ldID0gdHJ1ZTsKKwkJfQor CiAJfQogCi0JLyogRWFzaWVyIGNhc2U6IFR1cGxlIGhhcyB2YXJsZW5hIGRhdHVtcywgbm9u ZSBvZiB3aGljaCBhcmUgY29tcHJlc3NlZCAqLworCS8qCisJICogRWFzaWVyIGNhc2U6IFR1 cGxlIGhhcyB2YXJsZW5hIGRhdHVtcywgbm9uZSBvZiB3aGljaCBhcmUgY29tcHJlc3NlZCBv cgorCSAqIHNob3J0IHdpdGggNEIgaGVhZGVyCisJICovCiAJaWYgKCFmb3JtbmV3dHVwKQog CQlyZXR1cm4gaXR1cDsKIApAQCAtMjk5Nyw2ICszMDE5LDEwIEBAIGJ0X25vcm1hbGl6ZV90 dXBsZShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJICogY3Jl YXRpbmcgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSB0dXBsZSBmcm9tIHVuY29tcHJlc3Nl ZCBpbnB1dCBkYXR1bXMKIAkgKiAobm9ybWFsaXplZCBpbnB1dCBkYXR1bXMpLiAgVGhpcyBp cyByYXRoZXIgbmFpdmUsIGJ1dCBzaG91bGRuJ3QgYmUKIAkgKiBuZWNlc3NhcnkgdG9vIG9m dGVuLgorCSAqIEFsc28gdHVwbGUgaGFkIHNob3J0IHZhcmxlbmEgZGF0dW1zIHdpdGggNEIg aGVhZGVyLiBBY3R1YWxseSB0aGVyZSBpcyBubworCSAqIHJlc3RyaWN0aW9uIHdpdGggaGF2 ZSBoZWFwIHR1cGxlIGNvbnRhaW5pbmcgdmFybGVuYSBkYXR1bSB3aXRoIDRCIGhlYWRlcgor CSAqIGFuZCBjb3JyZXNwb25kaW5nIGluZGV4IHR1cGxlIGNvbnRhaW5pbmcgdmFybGVuYSBk YXR1bSB3aXRoIDFCIGhlYWRlci4KKwkgKiBGb3IgZmluZ2VycHJpbnRpbmcgbGV0J3MgY29u dmVydCBoZWFwIHR1cGxlIHZhcmxlbmEgZGF0dW0gdG8gMUIgZm9ybWF0LgogCSAqCiAJICog Tm90ZSB0aGF0IHdlIHJlbHkgb24gZGV0ZXJtaW5pc3RpYyBpbmRleF9mb3JtX3R1cGxlKCkg VE9BU1QgY29tcHJlc3Npb24KIAkgKiBvZiBub3JtYWxpemVkIGlucHV0LgpAQCAtMzAwNiw3 ICszMDMyLDcgQEAgYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUs IEluZGV4VHVwbGUgaXR1cCkKIAogCS8qIENhbm5vdCBsZWFrIG1lbW9yeSBoZXJlICovCiAJ Zm9yIChpID0gMDsgaSA8IHR1cGxlRGVzY3JpcHRvci0+bmF0dHM7IGkrKykKLQkJaWYgKHRv YXN0X2ZyZWVbaV0pCisJCWlmIChuZWVkX2ZyZWVbaV0pCiAJCQlwZnJlZShEYXR1bUdldFBv aW50ZXIobm9ybWFsaXplZFtpXSkpOwogCiAJcmV0dXJuIHJlZm9ybWVkOwotLSAKMi40My4w Cgo= --------------43TO6604PpmHAYOsNA0hyhtK--