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 1jKC4T-00028p-4c for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2020 02:28:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jKC4R-0000QC-Up for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2020 02:28:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jKC4R-0000Nz-CJ for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2020 02:28:35 +0000 Received: from sender4-op-o13.zoho.com ([136.143.188.13]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jKC4K-0006Ei-8s for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2020 02:28:34 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1585880903; cv=none; d=zohomail.com; s=zohoarc; b=gWWcn+Avu+Y2gafG2mXdvobq8++j+kqEn7Iwhly8tKKr5m0sVE+7Gw8fDilPIJfBZTrD94Icb7k1+zbErv+LjBCNiqDtKIU/9P4tu/j5f+TaCnZrJsRO2X3ttkFwK9thsQjuVCMFnJt5+sr+2w/5KZwInoB3jpn/ZYD9P1RQoaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585880903; h=Content-Type:Cc:Date:From:MIME-Version:Message-ID:References:Subject:To; bh=Wi6zy0dwrBUXGGDq6iw3ETpwZRyqA4L0db8i9FBcuTI=; b=Hy14kPtJgJoFmEXXDt8x7MD8muDkylCypOiy5ViO9UNTPaiMQswhOVI3sIxVuoUL1kLdT6GPrzID4pPBXwic1hn76YFtK+azTYQiumJdCMp5DGRbnpsx+Xr8ZlG9r8sTV2uKd+06Rbic5PctHK0lWPUUdksZiqeCR/9JawZdL/o= 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=1585880903; s=zoho; d=highgo.ca; i=movead.li@highgo.ca; h=Date:From:To:Cc:Subject:References:Mime-Version:Message-ID:Content-Type; bh=Wi6zy0dwrBUXGGDq6iw3ETpwZRyqA4L0db8i9FBcuTI=; b=M4NWatMoVxp8arl99Bj397xFpH631IwbdXtCo2p4ARg4y3TdU/FZAKw37js7ko1f jM2oez/39y8tAR4+TtOlmYO8gqVrQVMbUspx4wEMeqMsXjp7tKEvha/4FzTqe08PgSO /0UqrC3oOp4oWi4lFkjtBH4YNMiSQ3d5upvc6NV0= Received: from lchch (124.133.18.218 [124.133.18.218]) by mx.zohomail.com with SMTPS id 1585880898283834.0677922175622; Thu, 2 Apr 2020 19:28:18 -0700 (PDT) Date: Fri, 3 Apr 2020 10:28:15 +0800 From: "movead.li@highgo.ca" To: "Daniel Verite" Cc: "Tom Lane" , ashutosh.bapat , pgsql-hackers Subject: Re: A bug when use get_bit() function for a long bytea string References: <84525289-3891-4368-9157-5452f53a6908@manitou-mail.org> X-Priority: 3 X-GUID: 155FABDA-BB69-4BBA-8A31-4A0AA970D23D X-Has-Attach: yes X-Mailer: Foxmail 7.2.14.410[cn] Mime-Version: 1.0 Message-ID: <2020040310281100220146@highgo.ca> Content-Type: multipart/mixed; boundary="----=_001_NextPart343563775455_=----" X-Zoho-Virus-Status: 2 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_NextPart343563775455_=---- Content-Type: multipart/alternative; boundary="----=_002_NextPart500544053036_=----" ------=_002_NextPart500544053036_=---- Content-Type: text/plain; charset="ISO-8859-15" Content-Transfer-Encoding: base64 DQo+U29tZSBjb21tZW50cyBhYm91dCB0aGUgc2V0X2JpdC9nZXRfYml0IHBhcnRzLg0KPkknbSBy ZWFkaW5nIGxvbmdfYnl0ZWFfc3RyaW5nX2J1Z19maXhfdmVyNl9wZzEwLnBhdGNoLCBidXQgdGhh dA0KPmFwcGxpZXMgcHJvYmFibHkgdG8gdGhlIG90aGVyIGZpbGVzIG1lYW50IGZvciB0aGUgZXhp c3RpbmcgcmVsZWFzZXMNCj4oSSB0aGluayB5b3UgY291bGQgZ2V0IGF3YXkgd2l0aCBvbmx5IG9u ZSBwYXRjaCBmb3IgYmFja3BhdGNoaW5nDQo+YW5kIG9uZSBwYXRjaCBmb3IgdjEzLCBhbmQgY29t bWl0dGVycyB3aWxsIHNvcnQgb3V0IGhvdw0KPnRvIGRlYWwgd2l0aCByZWxlYXNlIGJyYW5jaGVz KS4NClRoYW5rcyBmb3IgdGVhY2hpbmcgbWUuDQoNCj5ieXRlYVNldEJpdChQR19GVU5DVElPTl9B UkdTKQ0KPnsNCj5ieXRlYSAgICAqcmVzID0gUEdfR0VUQVJHX0JZVEVBX1BfQ09QWSgwKTsNCj4t IGludDMyIG4gPSBQR19HRVRBUkdfSU5UMzIoMSk7DQo+KyBpbnQ2NCBuID0gUEdfR0VUQVJHX0lO VDY0KDEpOw0KPmludDMyIG5ld0JpdCA9IFBHX0dFVEFSR19JTlQzMigyKTsNCj5UaGUgMm5kIGFy Z3VtZW50IGlzIDMyLWJpdCwgbm90IDY0LiBQR19HRVRBUkdfSU5UMzIoMSkgbXVzdCBiZSB1c2Vk LiANCj4rIGVycm1zZygiaW5kZXggIklOVDY0X0ZPUk1BVCIgb3V0IG9mIHZhbGlkIHJhbmdlLCAw Li4iSU5UNjRfRk9STUFULA0KPisgbiwgKGludDY0KWxlbiAqIDggLSAxKSkpOw0KPlRoZSBjYXN0 IHRvIGludDY0IGF2b2lkcyB0aGUgb3ZlcmZsb3csIGJ1dCBpdCBtYXkgYWxzbyBwcm9kdWNlIGEN Cj5yZXN1bHQgdGhhdCBkb2VzIG5vdCByZWZsZWN0IHRoZSBhY3R1YWwgcmFuZ2UsIHdoaWNoIGlz IGxpbWl0ZWQgdG8NCj4yXjMxLTEsIGFnYWluIGJlY2F1c2UgdGhlIGJpdCBudW1iZXIgaXMgYSBz aWduZWQgMzItYml0IHZhbHVlLiANCj5JIGJlbGlldmUgdGhlIGZvcm11bGEgZm9yIHRoZSB1cHBl ciBsaW1pdCBpbiB0aGUgMzItYml0IGNhc2UgaXM6DQo+ICAobGVuIDw9IFBHX0lOVDMyX01BWCAv IDgpID8gKGxlbio4IC0gMSkgOiBQR19JTlQzMl9NQVg7DQoNCj5UaGVzZSBmdW5jdGlvbnMgY291 bGQgYmVuZWZpdCBmcm9tIGEgY29tbWVudCBtZW50aW9uaW5nIHRoYXQNCj50aGV5IGNhbm5vdCBy ZWFjaCB0aGUgZnVsbCBleHRlbnQgb2YgYSBieXRlYSwgYmVjYXVzZSBvZiB0aGUgc2l6ZSBsaW1p dA0KPm9uIHRoZSBiaXQgbnVtYmVyLg0KDQpCZWNhdXNlIHRoZSAybmQgYXJndW1lbnQgaXMgZGVz Y3JpYmluZyAnYml0JyBsb2NhdGlvbiBvZiBldmVyeSBieXRlIGluIGJ5dGVhDQpzdHJpbmcsIHNv IGFuIGludDMyIGlzIG5vdCBlbm91Z2ggZm9yIHRoYXQuIEkgdGhpbmsgdGhlIGNoYW5nZSBpcyBu b3RoaW5nIHdyb25nLA0Kb3IgSSBoYXZlIG5vdCBjYXVnaHQgeW91ciBtZWFucz8gDQoNCg0KPlRo ZXNlIDIgdGVzdHMgbmVlZCB0byBhbGxvY2F0ZSBiaWcgY2h1bmtzIG9mIGNvbnRpZ3VvdXMgbWVt b3J5LCBzbyB0aGV5DQo+bWlnaHQgZmFpbCBmb3IgbGFjayBvZiBtZW1vcnkgb24gdGlueSBtYWNo aW5lcywgYW5kIGV2ZW4gd2hlbiBub3QgZmFpbGluZywNCj50aGV5J3JlIHByZXR0eSBzbG93IHRv IHJ1bi4gQXJlIHRoZXkgd29ydGggdGhlIHRyb3VibGU/DQoNCg0KPlRoZXNlIDIgdGVzdHMgYXJl IHN1cHBvc2VkIHRvIGZhaWwgaW4gZXhpc3RpbmcgcmVsZWFzZXMgYmVjYXVzZSBzZXRfYml0KCkN Cj5hbmQgZ2V0X2JpdCgpIGRvbid0IHRha2UgYSBiaWdpbnQgYXMgdGhlIDJuZCBhcmd1bWVudC4N Cj5BbHNvLCB0aGUgc2FtZSBjb21tZW50IGFzIGFib3ZlIG9uIGhvdyBtdWNoIHRoZXkgYWxsb2Nh dGUuDQpJIGhhdmUgZGVsZXRlZCB0aGUgZm91ciB0ZXN0IGNhc2VzIGJlY2F1c2UgaXQgaXMgbm90 IHdvcnRoIHRoZSBtZW1vcnkgYW5kIHRpbWUsDQphbmQgbm8gbmV3IHRlc3QgY2FzZXMgYWRkZWQg YmVjYXVzZSBpdCBuZWVkcyB0aW1lIHRvIGdlbmVyYXRlIGxvdHMgb2YgZGF0YS4NCg0KTmV3IHBh dGNoIGF0dGFjaGVkLg0KDQoNCg0KUmVnYXJkcywNCkhpZ2hnbyBTb2Z0d2FyZSAoQ2FuYWRhL0No aW5hL1Bha2lzdGFuKSANClVSTCA6IHd3dy5oaWdoZ28uY2EgDQpFTUFJTDogbWFpbHRvOm1vdmVh ZChkb3QpbGkoYXQpaGlnaGdvKGRvdCljYQ0K ------=_002_NextPart500544053036_=---- Content-Type: text/html; charset="ISO-8859-15" Content-Transfer-Encoding: quoted-printable =0A

&= gt;Some comments about the set_bit/get_bit parts.
>I'm reading long_bytea_string_bug_fix_ver6_pg10.patch, but t= hat
>applies probably to the other files mea= nt for the existing releases
>(I think you c= ould get away with only one patch for backpatching
&= gt;and one patch for v13, and committers will sort out how
>to deal with release branches).
Thanks fo= r teaching me.

>byteaSetBit(PG_FUNCTION_ARGS)<= /div>
>{
>bytea &nbs= p;  *res =3D PG_GETARG_BYTEA_P_COPY(0);
>- int32 n =3D PG_GETARG_INT32(1);
>+ int64= n =3D PG_GETARG_INT64(1);
>int32 newBit =3D= PG_GETARG_INT32(2);
>The 2nd argument is 32= -bit, not 64. PG_GETARG_INT32(1) must be used. 
>+ errmsg("index "INT64_FORMAT" out of valid ran= ge, 0.."INT64_FORMAT,
>+ n, (int64)len * 8 -= 1)));
>The cast to int64 avoids the overflo= w, but it may also produce a
>result that do= es not reflect the actual range, which is limited to
&= gt;2^31-1, again because the bit number is a signed 32-bit value. 
>I believe the formula= for the upper limit in the 32-bit case is:
>  (len <=3D PG_INT32_MAX / 8) ? (len*8 - 1) : PG_INT32_MAX;
=

>These functions could benefi= t from a comment mentioning that
>they canno= t reach the full extent of a bytea, because of the size limit
>on the bit number.

= Because the 2nd argument is describing 'bit' location of every byte in byt= ea
string, so an int32 is not enough for that. I think the chang= e is nothing wrong,
or I have not caught your means? 
=


>These 2 tests need to allocat= e big chunks of contiguous memory, so they
>= might fail for lack of memory on tiny machines, and even when not failing,=
>they're pretty slow to run. Are they worth= the trouble?


>These 2 tests are supposed to fail in existing releases because set_bit()=
>and get_bit() don't take a bigint as the 2= nd argument.
>Also, the same comment as abov= e on how much they allocate.
I have deleted the four test = cases because it is not worth the memory and time,
and no new te= st cases added because it needs time to generate lots of data.
<= br>
New patch attached.
=0A


=0A
Regards,
Highg= o Software (Canada/China/Pakistan)
URL : www.highgo.ca
EMAIL: = mailto:movead(dot)li(at)highgo(dot)ca
= =0A
=0A ------=_002_NextPart500544053036_=------ ------=_001_NextPart343563775455_=---- Content-Type: application/octet-stream; name="long_bytea_string_bug_fix_ver7.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="long_bytea_string_bug_fix_ver7.zip" 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 AAA= ------=_001_NextPart343563775455_=------