Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jEOkt-0003Mv-NM for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2020 02:48:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jEOks-0004Ud-90 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2020 02:48:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jEOkr-0004UW-T0 for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2020 02:48:26 +0000 Received: from sender4-op-o13.zoho.com ([136.143.188.13]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jEOkk-0004gj-8p for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2020 02:48:25 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1584499693; cv=none; d=zohomail.com; s=zohoarc; b=GXNcgg3Z9cOFNrGdLu80vxSEI5io5F0xD9YtbMTujimfm98rQcuGz2uNKhjMm4O4RQPzR0YfthhqqjAl2K0e92N9qa1gWp4rS0AS1RMK/GaLHpDbgCTWu5SMCmW1wIJiZsIYNN5TRsqMmhN+WjUXO3AwJ3LKYDatrdJqWdZ8rkE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584499693; h=Content-Type:Cc:Date:From:MIME-Version:Message-ID:References:Subject:To; bh=DhqRGI1gKR3CJKm9S5AAG2kZyfBB0AiymJg7vfGHX2o=; b=OPgzvbYm5La8vrTuf/6K58H9omghZzjUXU3u43dunVkiQuffoei50fP0jIgLf8K080RNfdPGjfgFjrnK4V4a4Q74UPuzKYCWyY8lQu1FT9gmUfpEg5P6PmHgC4UarRjv/CuKcENF6pNApRT4V2D/bjfHmMOPwnxzlKsQF02Hw1A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=highgo.ca; spf=pass smtp.mailfrom=movead.li@highgo.ca; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1584499693; s=zoho; d=highgo.ca; i=movead.li@highgo.ca; h=Date:From:To:Cc:Subject:References:Mime-Version:Message-ID:Content-Type; bh=DhqRGI1gKR3CJKm9S5AAG2kZyfBB0AiymJg7vfGHX2o=; b=TeFsJpLOEbsP1jRZkWLoPELoIU7spDNXLBTObMYTi0byt7yhxwybGgJO0UBB7a9i KjHUYepi5FjqDnzvp2h4UvgtgcHZwL2F1lS2m9YB5cWZUaTawfydA7gBxq2m6pST572 9hNACsHVX+03cmFK9buyd0viloCj93kTLOVh7JcE= Received: from lchch (124.133.18.218 [124.133.18.218]) by mx.zohomail.com with SMTPS id 15844996917756.3341842683607865; Tue, 17 Mar 2020 19:48:11 -0700 (PDT) Date: Wed, 18 Mar 2020 10:48:09 +0800 From: "movead.li@highgo.ca" To: ashutosh.bapat Cc: pgsql-hackers Subject: Re: A bug when use get_bit() function for a long bytea string References: <20200312115135445367128@highgo.ca>, , <20200313111842791351178@highgo.ca>, X-Priority: 3 X-GUID: 5A2BDA7E-9677-4E78-A8BD-4391E8B17EEA X-Has-Attach: yes X-Mailer: Foxmail 7.2.14.410[cn] Mime-Version: 1.0 Message-ID: <2020031810480643107833@highgo.ca> Content-Type: multipart/mixed; boundary="----=_001_NextPart367843830636_=----" X-Zoho-Virus-Status: 1 X-ZohoMailClient: External List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. ------=_001_NextPart367843830636_=---- Content-Type: multipart/alternative; boundary="----=_002_NextPart281261286674_=----" ------=_002_NextPart281261286674_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 DQpIZWxsbyB0aGFua3MgZm9yIHRoZSBkZXRhaWxlZCByZXZpZXcsDQoNCj5JIHRoaW5rIHRoZSBz ZWNvbmQgYXJndW1lbnQgaW5kaWNhdGVzIHRoZSBiaXQgcG9zaXRpb24sIHdoaWNoIHdvdWxkIGJl IG1heCBieXRlYSBsZW5ndGggKiA4LiBJZiBtYXggYnl0ZWEgbGVuZ3RoIGNvdmVycyB3aG9sZSBp bnQzMiwgdGhlIHNlY29uZCBhcmd1bWVudCA+bmVlZHMgdG8gYmUgd2lkZXIgaS5lLiBpbnQ2NC4N ClllcywgaXQgbWFrZXMgc2VuY2UgYW5kIGZvbGxvd2VkLg0KDQo+IFNvbWUgbW9yZSBjb21tZW50 cyBvbiB0aGUgcGF0Y2gNCj4gc3RydWN0IHBnX2VuY29kaW5nDQo+IHsNCj4tIHVuc2lnbmVkICgq ZW5jb2RlX2xlbikgKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRsZW4pOw0KPisgaW50NjQg KCplbmNvZGVfbGVuKSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgZGxlbik7DQo+ICB1bnNp Z25lZCAoKmRlY29kZV9sZW4pIChjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25lZCBkbGVuKTsNCj4g IHVuc2lnbmVkICgqZW5jb2RlKSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgZGxlbiwgY2hh ciAqcmVzKTsNCj4gIHVuc2lnbmVkICgqZGVjb2RlKSAoY29uc3QgY2hhciAqZGF0YSwgdW5zaWdu ZWQgZGxlbiwgY2hhciAqcmVzKTsNCj4gV2h5IG5vdCB1c2UgcmV0dXJuIHR5cGUgb2YgaW50NjQg Zm9yIHJlc3Qgb2YgdGhlIGZ1bmN0aW9ucyBoZXJlIGFzIHdlbGw/DQo+ICByZXMgPSBlbmMtPmVu Y29kZShWQVJEQVRBX0FOWShkYXRhKSwgZGF0YWxlbiwgVkFSREFUQShyZXN1bHQpKTsNCj4gIC8q IE1ha2UgdGhpcyBGQVRBTCAnY2F1c2Ugd2UndmUgdHJvZGRlbiBvbiBtZW1vcnkgLi4uICovDQo+ LSBpZiAocmVzID4gcmVzdWx0bGVuKQ0KPisgaWYgKChpbnQ2NClyZXMgPiByZXN1bHRsZW4pDQo+ DQo+aWYgd2UgY2hhbmdlIHJldHVybiB0eXBlIG9mIGFsbCB0aG9zZSBmdW5jdGlvbnMgdG8gaW50 NjQsIHdlIHdvbid0IG5lZWQgdGhpcyBjYXN0Lg0KSSBjaGFuZ2UgdGhlICdlbmNvZGUnIGZ1bmN0 aW9uLCBpdCBuZWVkcyBhbiBpbnQ2NCByZXR1cm4gdHlwZSwgYnV0IGtlZXAgb3RoZXINCmZ1bmN0 aW9ucyBpbiAncGdfZW5jb2RpbmcnLCBiZWNhdXNlIEkgdGhpbmsgaXQgb2Ygbm8gbmVjZXNzYXJ5 IHJlYXNvbi4NCg0KPlJpZ2h0IG5vdyB3ZSBhcmUgdXNpbmcgaW50NjQgYmVjYXVzZSBieXRlYSBj YW4gYmUgMUdCLCBidXQgd2hhdCBpZiB3ZSBpbmNyZWFzZQ0KPnRoYXQgbGltaXQgdG9tb3Jyb3cs IHdpbGwgaW50NjQgYmUgc3VmZmljaWVudD8gVGhhdCBtYXkgYmUgdW5saWtlbHkgaW4gdGhlIG5l YXINCj5mdXR1cmUsIGJ1dCBuZXZlcnRoZWxlc3MgYSBwb3NzaWJpbGl0eS4gU2hvdWxkIHdlIHRo ZW4gZGVmaW5lIGEgbmV3IGRhdGF0eXBlDQo+d2hpY2ggcmVzb2x2ZXMgdG8gaW50NjQgcmlnaHQg bm93IGJ1dCByZWFsbHkgZGVwZW5kcyB1cG9uIHRoZSBieXRlYSBsZW5ndGguIEkNCj5hbSBub3Qg c3VnZ2VzdGluZyB0aGF0IHdlIGhhdmUgdG8gZG8gaXQgcmlnaHQgbm93LCBidXQgbWF5IGJlIHNv bWV0aGluZyB0bw0KPnRoaW5rIGFib3V0Lg0KSSBkZWNpZGUgdG8gdXNlIGludDY0IGJlY2F1c2Ug aWYgd2UgcmVhbGx5IHdhbnQgdG8gaW5jcmVhc2UgdGhlIGxpbWl0LCAgaXQgc2hvdWxkIGJlDQp0 aGUgc2FtZSBjaGFuZ2Ugd2l0aCAndGV4dCcsICd2YXJjaGFyJyB3aGljaCBoYXZlIHRoZSBzYW1l IGxpbWl0LiBTbyBpdCBtYXkgbmVlZA0KYSBtb3JlIGdlbmVyYWwgc3RydWN0LiBIZW5jZSBJIGdp dmUgdXAgdGhlIGlkZWEuDQoNCj4gaGV4X2VuY19sZW4oY29uc3QgY2hhciAqc3JjLCB1bnNpZ25l ZCBzcmNsZW4pDQo+IHsNCj4tIHJldHVybiBzcmNsZW4gPDwgMTsNCj4rIHJldHVybiAoaW50NjQp KHNyY2xlbiA8PCAxKTsNCj4NCj53aHkgbm90IHRvIGNvbnZlcnQgc3JjbGVuIGFsc28gdG8gaW50 NjQuIFRoYXQgd2lsbCBhbHNvIGNoYW5nZSB0aGUgcGdfZW5jb2RpbmcNCj5tZW1iZXIgZGVmaW5p dGlvbnMuIEJ1dCBpZiBlbmNvZGVkIGxlbmd0aCByZXF1aXJlcyBpbnQ2NCB0byBmaXQgdGhlIHBv c3NpYmx5DQo+dmFsdWVzLCBzYW1lIHdvdWxkIGJlIHRydWUgZm9yIHRoZSBzb3VyY2UgbGVuZ3Ro cy4gV2h5IGNhbid0IHRoZSBzb3VyY2UgbGVuZ3RoDQo+YWxzbyBiZSBpbnQ2ND8NCj5JZiBzdGls bCB3ZSB3YW50IHRoZSBjYXN0LCBJIHRoaW5rIGl0IHNob3VsZCBiZSAoKGludDY0KXNyY2xlbiA8 PCAxKSByYXRoZXINCj50aGFuIGNhc3RpbmcgdGhlIHJlc3VsdC4NCkkgcHJlZmVyIHRoZSAnKChp bnQ2NClzcmNsZW4gPDwgMSknIHdheS4NCg0KPiAgLyogMyBieXRlcyB3aWxsIGJlIGNvbnZlcnRl ZCB0byA0LCBsaW5lZmVlZCBhZnRlciA3NiBjaGFycyAqLw0KPi0gcmV0dXJuIChzcmNsZW4gKyAy KSAqIDQgLyAzICsgc3JjbGVuIC8gKDc2ICogMyAvIDQpOw0KPisgcmV0dXJuIChpbnQ2NCkoKHNy Y2xlbiArIDIpICogNCAvIDMgKyBzcmNsZW4gLyAoNzYgKiAzIC8gNCkpOw0KPnNpbWlsYXIgY29t bWVudHMgYXMgYWJvdmUuDQogRm9sbG93ZWQuDQoNCg0KPkl0IG1pZ2h0IGhlbHAgdG8gYWRkIGEg dGVzdCB3aGVyZSB3ZSBjb3VsZCBwYXNzIHRoZSBzZWNvbmQgYXJndW1lbnQgc29tZXRoaW5nDQo+ Z3JlYXRlciB0aGFuIDFHLiBCdXQgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byB3cml0ZSBzdWNoIGEg dGVzdCBjYXNlLg0KQWRkIHR3byB0ZXN0IGNhc2VzLg0KDQoNCg0KDQpIaWdoZ28gU29mdHdhcmUg KENhbmFkYS9DaGluYS9QYWtpc3RhbikgDQpVUkwgOiB3d3cuaGlnaGdvLmNhIA0KRU1BSUw6IG1h aWx0bzptb3ZlYWQoZG90KWxpKGF0KWhpZ2hnbyhkb3QpY2ENCg== ------=_002_NextPart281261286674_=---- Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =0A

=
Hello thanks for the detailed review,

<= /blockquote>
>I think the second argument indicates the b= it position, which would be max bytea length * 8. If max bytea length cove= rs whole int32, the second argument >needs to be wider i.e. int64.
Yes, it makes sence and followed.

&g= t; Some more comments on the patch
> st= ruct pg_encoding
> {
>- unsigned (*encode_len) (const cha= r *data, unsigned dlen);
>+ int64 (*encode_len) (const char *data, = unsigned dlen);
>  unsigned (*decode_len) (const= char *data, unsigned dlen);
>  un= signed (*encode) (const char *data, unsigned dlen, char *res);
>  unsigned (*decode) (const char *data, unsigned dlen, char= *res);
> Why not use return type of int64 for rest of the functions= here as well?
>  res =3D enc->encode(VARDATA_ANY(data), dat= alen, VARDATA(result));
>  /* Make this FATAL 'cause we've trod= den on memory ... */
>- if (res > resultlen)
>+ if ((int64)= res > resultlen)
>
>if we change return type of all those f= unctions to int64, we won't need this cast.
I change the 'encode' = function, it needs an int64 return type, but keep other
functions in 'pg_encoding', = because I think it of no necessary reason.

>Right now we are using int64 because bytea can be 1G= B, but what if we increase
>that limit tomorrow, will int64 be suffi= cient? That may be unlikely in the near
>future, but nevertheless a = possibility. Should we then define a new datatype
>which resolves to= int64 right now but really depends upon the bytea length. I
>am not= suggesting that we have to do it right now, but may be something to
&g= t;think about.
I decide to use int64 because if we really want to = increase the limit,  it should be
may need
a more general s= truct. Hence I give up the idea.

> hex_enc_l= en(const char *src, unsigned srclen)
> {
>- return srclen= << 1;
>+ return (int64)(srclen << 1);
>
>wh= y not to convert srclen also to int64. That will also change the pg_encodi= ng
>member definitions. But if encoded length requires int64 to fit = the possibly
>values, same would be true for the source lengths. Why= can't the source length
>also be int64?
= >If still we want the cast, I think it should be ((int64)srclen <<= ; 1) rather
>than casting the result.
I prefer the '((int64)srclen << 1)' way.

&= gt;  /* 3 bytes will be converted to 4, linefeed after 76 chars */>- return (srclen + 2) * 4 / 3 + srclen / (76 * 3 / 4);
>+ retur= n (int64)((srclen + 2) * 4 / 3 + srclen / (76 * 3 / 4));
>similar co= mments as above.
 Followed.


>It might help to= add a test where we could pass the second argument something
>great= er than 1G. But it may be difficult to write such a test case.
Add two test cases.



Highgo Software (= Canada/China/Pakistan)
URL : w= ww.highgo.ca
EMAIL: mailto:movead(= dot)li(at)highgo(dot)ca
=0A
=0A<= /body> ------=_002_NextPart281261286674_=------ ------=_001_NextPart367843830636_=---- Content-Type: application/octet-stream; name="long_bytea_string_bug_fix_ver3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="long_bytea_string_bug_fix_ver3.patch" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9lbmNvZGUuYwppbmRleCBiOGQ5ZWM3ZTAwLi5kMGNiYmIyNzJiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZW5jb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2VuY29kZS5jCkBAIC0yMCw5ICsyMCw5IEBACiAKIHN0cnVjdCBwZ19lbmNvZGluZwog ewotCXVuc2lnbmVkCSgqZW5jb2RlX2xlbikgKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRs ZW4pOworCWludDY0CQkoKmVuY29kZV9sZW4pIChjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25lZCBk bGVuKTsKIAl1bnNpZ25lZAkoKmRlY29kZV9sZW4pIChjb25zdCBjaGFyICpkYXRhLCB1bnNpZ25l ZCBkbGVuKTsKLQl1bnNpZ25lZAkoKmVuY29kZSkgKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVk IGRsZW4sIGNoYXIgKnJlcyk7CisJaW50NjQJCSgqZW5jb2RlKSAoY29uc3QgY2hhciAqZGF0YSwg dW5zaWduZWQgZGxlbiwgY2hhciAqcmVzKTsKIAl1bnNpZ25lZAkoKmRlY29kZSkgKGNvbnN0IGNo YXIgKmRhdGEsIHVuc2lnbmVkIGRsZW4sIGNoYXIgKnJlcyk7CiB9OwogCkBAIC0zOSw5ICszOSw4 IEBAIGJpbmFyeV9lbmNvZGUoUEdfRlVOQ1RJT05fQVJHUykKIAlEYXR1bQkJbmFtZSA9IFBHX0dF VEFSR19EQVRVTSgxKTsKIAl0ZXh0CSAgICpyZXN1bHQ7CiAJY2hhcgkgICAqbmFtZWJ1ZjsKLQlp bnQJCQlkYXRhbGVuLAotCQkJCXJlc3VsdGxlbiwKLQkJCQlyZXM7CisJaW50CQkJZGF0YWxlbjsK KwlpbnQ2NAkJcmVzLHJlc3VsdGxlbjsKIAljb25zdCBzdHJ1Y3QgcGdfZW5jb2RpbmcgKmVuYzsK IAogCWRhdGFsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKTsKQEAgLTc2LDggKzc1LDggQEAg YmluYXJ5X2RlY29kZShQR19GVU5DVElPTl9BUkdTKQogCWJ5dGVhCSAgICpyZXN1bHQ7CiAJY2hh cgkgICAqbmFtZWJ1ZjsKIAlpbnQJCQlkYXRhbGVuLAotCQkJCXJlc3VsdGxlbiwKIAkJCQlyZXM7 CisJdW5zaWduZWQJcmVzdWx0bGVuOwogCWNvbnN0IHN0cnVjdCBwZ19lbmNvZGluZyAqZW5jOwog CiAJZGF0YWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpOwpAQCAtMTIyLDcgKzEyMSw3IEBA IHN0YXRpYyBjb25zdCBpbnQ4IGhleGxvb2t1cFsxMjhdID0gewogCS0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogfTsKIAotdW5z aWduZWQKK2ludDY0CiBoZXhfZW5jb2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBj aGFyICpkc3QpCiB7CiAJY29uc3QgY2hhciAqZW5kID0gc3JjICsgbGVuOwpAQCAtMTMzLDcgKzEz Miw3IEBAIGhleF9lbmNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRz dCkKIAkJKmRzdCsrID0gaGV4dGJsWypzcmMgJiAweEZdOwogCQlzcmMrKzsKIAl9Ci0JcmV0dXJu IGxlbiAqIDI7CisJcmV0dXJuIChpbnQ2NClsZW4gKiAyOwogfQogCiBzdGF0aWMgaW5saW5lIGNo YXIKQEAgLTE4NCwxMCArMTgzLDEwIEBAIGhleF9kZWNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNp Z25lZCBsZW4sIGNoYXIgKmRzdCkKIAlyZXR1cm4gcCAtIGRzdDsKIH0KIAotc3RhdGljIHVuc2ln bmVkCitzdGF0aWMgaW50NjQKIGhleF9lbmNfbGVuKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQg c3JjbGVuKQogewotCXJldHVybiBzcmNsZW4gPDwgMTsKKwlyZXR1cm4gKGludDY0KXNyY2xlbiA8 PCAxOwogfQogCiBzdGF0aWMgdW5zaWduZWQKQEAgLTIxNCw3ICsyMTMsNyBAQCBzdGF0aWMgY29u c3QgaW50OCBiNjRsb29rdXBbMTI4XSA9IHsKIAk0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0Nywg NDgsIDQ5LCA1MCwgNTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIH07CiAKLXN0YXRpYyB1bnNpZ25l ZAorc3RhdGljIGludDY0CiBwZ19iYXNlNjRfZW5jb2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWdu ZWQgbGVuLCBjaGFyICpkc3QpCiB7CiAJY2hhcgkgICAqcCwKQEAgLTMzMSwxMSArMzMwLDExIEBA IHBnX2Jhc2U2NF9kZWNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRz dCkKIH0KIAogCi1zdGF0aWMgdW5zaWduZWQKK3N0YXRpYyBpbnQ2NAogcGdfYmFzZTY0X2VuY19s ZW4oY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBzcmNsZW4pCiB7CiAJLyogMyBieXRlcyB3aWxs IGJlIGNvbnZlcnRlZCB0byA0LCBsaW5lZmVlZCBhZnRlciA3NiBjaGFycyAqLwotCXJldHVybiAo c3JjbGVuICsgMikgKiA0IC8gMyArIHNyY2xlbiAvICg3NiAqIDMgLyA0KTsKKwlyZXR1cm4gKChp bnQ2NClzcmNsZW4gKyAyKSAqIDQgLyAzICsgKGludDY0KXNyY2xlbiAvICg3NiAqIDMgLyA0KTsK IH0KIAogc3RhdGljIHVuc2lnbmVkCkBAIC0zNjEsMTIgKzM2MCwxMiBAQCBwZ19iYXNlNjRfZGVj X2xlbihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbikKICNkZWZpbmUgVkFMKENIKQkJ CSgoQ0gpIC0gJzAnKQogI2RlZmluZSBESUcoVkFMKQkJKChWQUwpICsgJzAnKQogCi1zdGF0aWMg dW5zaWduZWQKK3N0YXRpYyBpbnQ2NAogZXNjX2VuY29kZShjb25zdCBjaGFyICpzcmMsIHVuc2ln bmVkIHNyY2xlbiwgY2hhciAqZHN0KQogewogCWNvbnN0IGNoYXIgKmVuZCA9IHNyYyArIHNyY2xl bjsKIAljaGFyCSAgICpycCA9IGRzdDsKLQlpbnQJCQlsZW4gPSAwOworCWludDY0CQlsZW4gPSAw OwogCiAJd2hpbGUgKHNyYyA8IGVuZCkKIAl7CkBAIC00NDgsMTEgKzQ0NywxMSBAQCBlc2NfZGVj b2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgc3JjbGVuLCBjaGFyICpkc3QpCiAJcmV0dXJu IGxlbjsKIH0KIAotc3RhdGljIHVuc2lnbmVkCitzdGF0aWMgaW50NjQKIGVzY19lbmNfbGVuKGNv bnN0IGNoYXIgKnNyYywgdW5zaWduZWQgc3JjbGVuKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IHNy YyArIHNyY2xlbjsKLQlpbnQJCQlsZW4gPSAwOworCWludDY0CQlsZW4gPSAwOwogCiAJd2hpbGUg KHNyYyA8IGVuZCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyYml0 LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyYml0LmMKaW5kZXggYzMyNTc1NTNiZC4uZTFi Y2QwY2M2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmJpdC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJiaXQuYwpAQCAtMTc4Nyw3ICsxNzg3LDcgQEAgRGF0 dW0KIGJpdHNldGJpdChQR19GVU5DVElPTl9BUkdTKQogewogCVZhckJpdAkgICAqYXJnMSA9IFBH X0dFVEFSR19WQVJCSVRfUCgwKTsKLQlpbnQzMgkJbiA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlp bnQ2NAkJbiA9IFBHX0dFVEFSR19JTlQ2NCgxKTsKIAlpbnQzMgkJbmV3Qml0ID0gUEdfR0VUQVJH X0lOVDMyKDIpOwogCVZhckJpdAkgICAqcmVzdWx0OwogCWludAkJCWxlbiwKQEAgLTE3OTgsMTAg KzE3OTgsMTAgQEAgYml0c2V0Yml0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJYml0Tm87CiAKIAli aXRsZW4gPSBWQVJCSVRMRU4oYXJnMSk7Ci0JaWYgKG4gPCAwIHx8IG4gPj0gYml0bGVuKQorCWlm IChuIDwgMCB8fCBuID49IChpbnQ2NCliaXRsZW4pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9BUlJBWV9TVUJTQ1JJUFRfRVJST1IpLAotCQkJCSBlcnJtc2coImJpdCBp bmRleCAlZCBvdXQgb2YgdmFsaWQgcmFuZ2UgKDAuLiVkKSIsCisJCQkJIGVycm1zZygiYml0IGlu ZGV4ICJJTlQ2NF9GT1JNQVQiIG91dCBvZiB2YWxpZCByYW5nZSAoMC4uJWQpIiwKIAkJCQkJCW4s IGJpdGxlbiAtIDEpKSk7CiAKIAkvKgpAQCAtMTgyMiw4ICsxODIyLDggQEAgYml0c2V0Yml0KFBH X0ZVTkNUSU9OX0FSR1MpCiAKIAltZW1jcHkociwgcCwgVkFSQklUQllURVMoYXJnMSkpOwogCi0J Ynl0ZU5vID0gbiAvIEJJVFNfUEVSX0JZVEU7Ci0JYml0Tm8gPSBCSVRTX1BFUl9CWVRFIC0gMSAt IChuICUgQklUU19QRVJfQllURSk7CisJYnl0ZU5vID0gKGludDMyKShuIC8gQklUU19QRVJfQllU RSk7CisJYml0Tm8gPSBCSVRTX1BFUl9CWVRFIC0gMSAtIChpbnQzMikobiAlIEJJVFNfUEVSX0JZ VEUpOwogCiAJLyoKIAkgKiBVcGRhdGUgdGhlIGJ5dGUuCkBAIC0xODQ5LDIzICsxODQ5LDIzIEBA IERhdHVtCiBiaXRnZXRiaXQoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlWYXJCaXQJICAgKmFyZzEg PSBQR19HRVRBUkdfVkFSQklUX1AoMCk7Ci0JaW50MzIJCW4gPSBQR19HRVRBUkdfSU5UMzIoMSk7 CisJaW50NjQJCW4gPSBQR19HRVRBUkdfSU5UNjQoMSk7CiAJaW50CQkJYml0bGVuOwogCWJpdHM4 CSAgICpwOwogCWludAkJCWJ5dGVObywKIAkJCQliaXRObzsKIAogCWJpdGxlbiA9IFZBUkJJVExF TihhcmcxKTsKLQlpZiAobiA8IDAgfHwgbiA+PSBiaXRsZW4pCisJaWYgKG4gPCAwIHx8IG4gPj0g KGludDY0KWJpdGxlbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0FS UkFZX1NVQlNDUklQVF9FUlJPUiksCi0JCQkJIGVycm1zZygiYml0IGluZGV4ICVkIG91dCBvZiB2 YWxpZCByYW5nZSAoMC4uJWQpIiwKKwkJCQkgZXJybXNnKCJiaXQgaW5kZXggIklOVDY0X0ZPUk1B VCIgb3V0IG9mIHZhbGlkIHJhbmdlICgwLi4lZCkiLAogCQkJCQkJbiwgYml0bGVuIC0gMSkpKTsK IAogCXAgPSBWQVJCSVRTKGFyZzEpOwogCi0JYnl0ZU5vID0gbiAvIEJJVFNfUEVSX0JZVEU7Ci0J Yml0Tm8gPSBCSVRTX1BFUl9CWVRFIC0gMSAtIChuICUgQklUU19QRVJfQllURSk7CisJYnl0ZU5v ID0gKGludDMyKShuIC8gQklUU19QRVJfQllURSk7CisJYml0Tm8gPSBCSVRTX1BFUl9CWVRFIC0g MSAtIChpbnQzMikobiAlIEJJVFNfUEVSX0JZVEUpOwogCiAJaWYgKHBbYnl0ZU5vXSAmICgxIDw8 IGJpdE5vKSkKIAkJUEdfUkVUVVJOX0lOVDMyKDEpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3ZhcmxlbmEuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKaW5k ZXggOTA3YjVhYjdiMC4uYjhiMDZkNWUzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3ZhcmxlbmEuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCkBAIC0z ODgsNyArMzg4LDcgQEAgYnl0ZWFvdXQoUEdfRlVOQ1RJT05fQVJHUykKIAl7CiAJCS8qIFByaW50 IHRyYWRpdGlvbmFsIGVzY2FwZWQgZm9ybWF0ICovCiAJCWNoYXIJICAgKnZwOwotCQlpbnQJCQls ZW47CisJCWludDY0CQlsZW47CiAJCWludAkJCWk7CiAKIAkJbGVuID0gMTsJCQkJLyogZW1wdHkg c3RyaW5nIGhhcyAxIGNoYXIgKi8KQEAgLTM0NjMsMTEgKzM0NjMsMTEgQEAgYnl0ZWFHZXRCaXQo UEdfRlVOQ1RJT05fQVJHUykKIAogCWxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKHYpOwogCi0JaWYg KG4gPCAwIHx8IG4gPj0gbGVuICogOCkKKwlpZiAobiA8IDAgfHwgKGludDY0KW4gPj0gKGludDY0 KWxlbiAqIDgpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9BUlJBWV9T VUJTQ1JJUFRfRVJST1IpLAotCQkJCSBlcnJtc2coImluZGV4ICVkIG91dCBvZiB2YWxpZCByYW5n ZSwgMC4uJWQiLAotCQkJCQkJbiwgbGVuICogOCAtIDEpKSk7CisJCQkJIGVycm1zZygiaW5kZXgg JWQgb3V0IG9mIHZhbGlkIHJhbmdlLCAwLi4iSU5UNjRfRk9STUFULAorCQkJCQkJbiwgKGludDY0 KWxlbiAqIDggLSAxKSkpOwogCiAJYnl0ZU5vID0gbiAvIDg7CiAJYml0Tm8gPSBuICUgODsKQEAg LTM1MzQsMTEgKzM1MzQsMTEgQEAgYnl0ZWFTZXRCaXQoUEdfRlVOQ1RJT05fQVJHUykKIAogCWxl biA9IFZBUlNJWkUocmVzKSAtIFZBUkhEUlNaOwogCi0JaWYgKG4gPCAwIHx8IG4gPj0gbGVuICog OCkKKwlpZiAobiA8IDAgfHwgKGludDY0KW4gPj0gKGludDY0KWxlbiAqIDgpCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9BUlJBWV9TVUJTQ1JJUFRfRVJST1IpLAotCQkJ CSBlcnJtc2coImluZGV4ICVkIG91dCBvZiB2YWxpZCByYW5nZSwgMC4uJWQiLAotCQkJCQkJbiwg bGVuICogOCAtIDEpKSk7CisJCQkJIGVycm1zZygiaW5kZXggJWQgb3V0IG9mIHZhbGlkIHJhbmdl LCAwLi4iSU5UNjRfRk9STUFULAorCQkJCQkJbiwgKGludDY0KWxlbiAqIDggLSAxKSkpOwogCiAJ Ynl0ZU5vID0gbiAvIDg7CiAJYml0Tm8gPSBuICUgODsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IDdmYjU3NGY5ZGMuLmUzYzgxOWU0NmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt MzgxMCwxMCArMzgxMCwxMCBAQAogICBwcm9uYW1lID0+ICdvdmVybGF5JywgcHJvcmV0dHlwZSA9 PiAnYml0JywgcHJvYXJndHlwZXMgPT4gJ2JpdCBiaXQgaW50NCcsCiAgIHByb3NyYyA9PiAnYml0 b3ZlcmxheV9ub19sZW4nIH0sCiB7IG9pZCA9PiAnMzAzMicsIGRlc2NyID0+ICdnZXQgYml0JywK LSAgcHJvbmFtZSA9PiAnZ2V0X2JpdCcsIHByb3JldHR5cGUgPT4gJ2ludDQnLCBwcm9hcmd0eXBl cyA9PiAnYml0IGludDQnLAorICBwcm9uYW1lID0+ICdnZXRfYml0JywgcHJvcmV0dHlwZSA9PiAn aW50NCcsIHByb2FyZ3R5cGVzID0+ICdiaXQgaW50OCcsCiAgIHByb3NyYyA9PiAnYml0Z2V0Yml0 JyB9LAogeyBvaWQgPT4gJzMwMzMnLCBkZXNjciA9PiAnc2V0IGJpdCcsCi0gIHByb25hbWUgPT4g J3NldF9iaXQnLCBwcm9yZXR0eXBlID0+ICdiaXQnLCBwcm9hcmd0eXBlcyA9PiAnYml0IGludDQg aW50NCcsCisgIHByb25hbWUgPT4gJ3NldF9iaXQnLCBwcm9yZXR0eXBlID0+ICdiaXQnLCBwcm9h cmd0eXBlcyA9PiAnYml0IGludDggaW50NCcsCiAgIHByb3NyYyA9PiAnYml0c2V0Yml0JyB9LAog CiAjIGZvciBtYWNhZGRyIHR5cGUgc3VwcG9ydApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggZTIwMTZh OGJjMi4uNDBjZjUzOTQwMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0zMiw3ICszMiw3IEBAIGV4 dGVybiBpbnQJZXJyZGF0YXR5cGUoT2lkIGRhdGF0eXBlT2lkKTsKIGV4dGVybiBpbnQJZXJyZG9t YWluY29uc3RyYWludChPaWQgZGF0YXR5cGVPaWQsIGNvbnN0IGNoYXIgKmNvbm5hbWUpOwogCiAv KiBlbmNvZGUuYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGhleF9lbmNvZGUoY29uc3QgY2hhciAqc3Jj LCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRzdCk7CitleHRlcm4gaW50NjQgaGV4X2VuY29kZShjb25z dCBjaGFyICpzcmMsIHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KTsKIGV4dGVybiB1bnNpZ25lZCBo ZXhfZGVjb2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBjaGFyICpkc3QpOwogCiAv KiBpbnQuYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9iaXQub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9iaXQub3V0CmluZGV4IGExZmFiN2ViY2IuLjA2 ZDEwMGRiZGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYml0Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2JpdC5vdXQKQEAgLTY1Niw2ICs2NTYsMzgg QEAgU0VMRUNUIHNldF9iaXQoQicwMTAxMDExMDAwMTAwMTAwJywgMTUsIDEpOwogCiBTRUxFQ1Qg c2V0X2JpdChCJzAxMDEwMTEwMDAxMDAxMDAnLCAxNiwgMSk7CS0tIGZhaWwKIEVSUk9SOiAgYml0 IGluZGV4IDE2IG91dCBvZiB2YWxpZCByYW5nZSAoMC4uMTUpCitTRUxFQ1QgZ2V0X2JpdCgKKyAg ICAgICBzZXRfYml0KChyZXBlYXQoJ1Bvc3RncmVzJywgNTEyICogMTAyNCAqIDEwMjQgLyA4KSk6 OmJ5dGVhLCAwLCAwKQorICAgICAgICwwKTsKKyBnZXRfYml0IAorLS0tLS0tLS0tCisgICAgICAg MAorKDEgcm93KQorCitTRUxFQ1QgZ2V0X2JpdCgKKyAgICAgICBzZXRfYml0KChyZXBlYXQoJ1Bv c3RncmVzJywgNTEyICogMTAyNCAqIDEwMjQgLyA4KSk6OmJ5dGVhLCAwLCAxKQorICAgICAgICww KTsKKyBnZXRfYml0IAorLS0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQorCitzZWxlY3QgZ2V0 X2JpdCgKKyAgICAgICAgc2V0X2JpdCgocmVwZWF0KCdQb3N0Z3JlcycsIDUxMiAqIDEwMjQgKiAx MDI0IC8gOCkpOjpieXRlYSwgMTAyNCAqIDEwMjQgKiAxMDI0ICsgMSwgMCkKKyAgICAgICAsMTAy NCAqIDEwMjQgKiAxMDI0ICsgMSk7CisgZ2V0X2JpdCAKKy0tLS0tLS0tLQorICAgICAgIDAKKygx IHJvdykKKworc2VsZWN0IGdldF9iaXQoCisgICAgICAgIHNldF9iaXQoKHJlcGVhdCgnUG9zdGdy ZXMnLCA1MTIgKiAxMDI0ICogMTAyNCAvIDgpKTo6Ynl0ZWEsIDEwMjQgKiAxMDI0ICogMTAyNCAr IDEsIDEpCisgICAgICAgLDEwMjQgKiAxMDI0ICogMTAyNCArIDEpOworIGdldF9iaXQgCistLS0t LS0tLS0KKyAgICAgICAxCisoMSByb3cpCisKIC0tIE92ZXJsYXkKIFNFTEVDVCBvdmVybGF5KEIn MDEwMTAxMTEwMCcgcGxhY2luZyAnMDAxJyBmcm9tIDIgZm9yIDMpOwogICBvdmVybGF5ICAgCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9iaXQuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvYml0LnNxbAppbmRleCA3NjgxZDRhYjRkLi41ZWY0YWE0MmRhIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9iaXQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Jp dC5zcWwKQEAgLTIwMCw2ICsyMDAsMTkgQEAgRFJPUCBUQUJMRSBWQVJCSVRfU0hJRlRfVEFCTEU7 CiBTRUxFQ1QgZ2V0X2JpdChCJzAxMDEwMTEwMDAxMDAnLCAxMCk7CiBTRUxFQ1Qgc2V0X2JpdChC JzAxMDEwMTEwMDAxMDAxMDAnLCAxNSwgMSk7CiBTRUxFQ1Qgc2V0X2JpdChCJzAxMDEwMTEwMDAx MDAxMDAnLCAxNiwgMSk7CS0tIGZhaWwKK1NFTEVDVCBnZXRfYml0KAorICAgICAgIHNldF9iaXQo KHJlcGVhdCgnUG9zdGdyZXMnLCA1MTIgKiAxMDI0ICogMTAyNCAvIDgpKTo6Ynl0ZWEsIDAsIDAp CisgICAgICAgLDApOworU0VMRUNUIGdldF9iaXQoCisgICAgICAgc2V0X2JpdCgocmVwZWF0KCdQ b3N0Z3JlcycsIDUxMiAqIDEwMjQgKiAxMDI0IC8gOCkpOjpieXRlYSwgMCwgMSkKKyAgICAgICAs MCk7CitzZWxlY3QgZ2V0X2JpdCgKKyAgICAgICAgc2V0X2JpdCgocmVwZWF0KCdQb3N0Z3Jlcycs IDUxMiAqIDEwMjQgKiAxMDI0IC8gOCkpOjpieXRlYSwgMTAyNCAqIDEwMjQgKiAxMDI0ICsgMSwg MCkKKyAgICAgICAsMTAyNCAqIDEwMjQgKiAxMDI0ICsgMSk7CitzZWxlY3QgZ2V0X2JpdCgKKyAg ICAgICAgc2V0X2JpdCgocmVwZWF0KCdQb3N0Z3JlcycsIDUxMiAqIDEwMjQgKiAxMDI0IC8gOCkp OjpieXRlYSwgMTAyNCAqIDEwMjQgKiAxMDI0ICsgMSwgMSkKKyAgICAgICAsMTAyNCAqIDEwMjQg KiAxMDI0ICsgMSk7CisKIAogLS0gT3ZlcmxheQogU0VMRUNUIG92ZXJsYXkoQicwMTAxMDExMTAw JyBwbGFjaW5nICcwMDEnIGZyb20gMiBmb3IgMyk7Cg== ------=_001_NextPart367843830636_=------