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.96) (envelope-from ) id 1whoIW-000Quv-0Y for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 12:56:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whoIT-00D9YT-1h for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 12:56:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whoIT-00D9YJ-0e for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 12:56:09 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1whoIQ-00000000TRZ-3mle for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 12:56:09 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4gww1s0Rh3z49Pyr; Thu, 09 Jul 2026 15:56:00 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1783601762; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=0rh0T93+C7Dchkjs9V9YxTneEY2ogD9Lcst+QwYfkGU=; b=LL1/BZADke25vJe9qPOxlRCtw/BhKavV3cVC/aLYZss+NNYrd4Dri3WX9qhbFCe+6yRbOv O5LBs09r10qTLP2Uy3SSrQODNTB4I5rFHA9urFqkjnQTRNdpdSgcalsCBroNRj22icU30m pl6zmX/ijFcX/QYwktd3x42hczfeipy57rutI1GmYfMETG9Fry3y2EI1ao6FR8LEDBx2ln qOMPcEYUi4KW18qFUtnq4lM1v+otJo3donckoRLtFx5bGT3GdhckVzw9/q1sA5gtxc/WGv Al1sSKZk2ZTwKOytUV5EOdpfB3bhvYljgPOzIU7Dy9J5SYtqu2OEPl52Dpi78w== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1783601762; b=Ov6kAn8H8oVGPmSfcBDdHmU1YsI+ryc96HrKecLYOIaDIe12wDUzDGGEJb0D0tUz3sZ3rU OIgPU73V4crQoo60C8wXHvKp4NCKjjPw5W4/Qpc7Jqlpn5pianfe6yOdrFeOCix1Fur8Tj DXdZu6GkqTfY9b95DdUIguVkZ2lzHrUFzfaIf+UpG7IPeaNldw8wSVDzCnX6qkWzM3Qq/T dCMOcDRbqH300vPPy3C7BR5VrPms+A4yLOwkO8qr4TuIxBUFz9izIhsOMrBf5mTuNv2LJx xMO5lqzlpBAlNAxyToi/AVX9vqUHBNONhRFNXGXU94AtPbSS99zFidSXfoGNTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1783601762; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=0rh0T93+C7Dchkjs9V9YxTneEY2ogD9Lcst+QwYfkGU=; b=NrQrJVWtOByPEj2yv+0CFNFV0+Wj7zQsigWx5hNSEs0Rafsv5SD0bifHL/tZb2FhfYRkRE 1kB0OizLd0gOeFSd2mkel03buSAEGS12626t70VEDSDbIHfLeTlxUNfwJI6dGzH7gkAtJA nvfHWJxwQaunywfOmUUIof4mE2k9aNCCwSVB9vFhMbg2UGuROtoYMcFgBvmEp/hoyZdq5w njTj9or6tbk3k/efPsvKlp7rg2ift+lqHoBn3vBgkpilfzUQnHk8tWdytb+Cpd0JJfYpFa 7gsap0LyQRIVf83IVy/jOllMuE3uUhD0Plg9bISSx5wx8xv6zHkF/0hMMBLsWg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------aoKvjaTWbhpUcYZaeBAQgM5X" Message-ID: <4cdfc0dc-9f66-4113-ad00-6e7a2cfa7211@iki.fi> Date: Thu, 9 Jul 2026 15:55:59 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: libpq: Process buffered SSL read bytes to support records >8kB on async API To: Peter Eisentraut , solai v , Jacob Champion Cc: Mark Dilger , Andres Freund , Lars Kanis , pgsql-hackers@lists.postgresql.org, Merlin Moncure References: <2039ac58-d3e0-434b-ac1a-2a987f3b4cb1@greiz-reinsdorf.de> <57d1e8b1-d016-4cea-9b60-63cbdb40eb81@iki.fi> <990a4710-fed1-411a-aba4-ddc25825ee48@iki.fi> <34844e8c-267c-4daf-b1e0-f26059a4a7d3@eisentraut.org> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: <34844e8c-267c-4daf-b1e0-f26059a4a7d3@eisentraut.org> 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. --------------aoKvjaTWbhpUcYZaeBAQgM5X Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 08/07/2026 22:16, Peter Eisentraut wrote: > In pqDrainPending(), there is > > nread = pqsecure_read(conn, conn->inBuffer + conn->inEnd, > bytes_pending); > conn->inEnd += nread; > > But pqsecure_read() can return -1 for error. So adding that to conn- > >inEnd at that point seems wrong. > > There is error handling in the following code, but this would still kind > of corrupt the conn->inEnd value? > > /* When there are bytes pending, the read function is not supposed > to fail */ > if (nread != bytes_pending) > { > libpq_append_conn_error(conn, > "drained only %zu of %zd pending bytes > in transport buffer", > nread, bytes_pending); > return -1; > } > > I'm not sure if that comment means that a -1 return cannot happen? Or > just that the whole error check should not happen? The comment in pgsecure_bytes_pending() says: > * If pqsecure_read() is called for this number of bytes, it's guaranteed to > * return successfully without reading from the underlying socket. See > * pqDrainPending() for a more complete discussion of the concepts involved. so as long as pqsecure_read() and pqsecure_read_pending() honor that contract, pqsecure_read() should not return an error. I agree that's a bit sloppy though, we should still check the return value. The intention was also that it cannot do a short read, but that wasn't quite clear from the comment either. > Also note that the format placeholder for nread is wrong. If you do get > a -1, it will print some large unsigned value. Good catch. Patch attached to clean up all that. - Heikki --------------aoKvjaTWbhpUcYZaeBAQgM5X Content-Type: text/x-patch; charset=UTF-8; name="0001-libpq-Make-error-checks-in-the-new-buffer-draining-c.patch" Content-Disposition: attachment; filename*0="0001-libpq-Make-error-checks-in-the-new-buffer-draining-c.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiZTY4ZTk0ZjgxZDhiYjgzMGNmZGE2ZWVlNmEyMGE0MWVjMzM1OTMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgOSBKdWwgMjAyNiAxNTo1MTozMCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggMS8xXSBsaWJwcTogTWFrZSBlcnJvciBjaGVja3MgaW4gdGhlIG5l dyBidWZmZXIgZHJhaW5pbmcgY29kZQogbW9yZSByb2J1c3QKCkNoZWNrIGV4cGxpY2l0bHkg Zm9yIHBxc2VjdXJlX3JlYWQoKSByZXR1cm5pbmcgYW4gZXJyb3IuIEl0IHNob3VsZG4ndApm YWlsLCBhbmQgd2Ugd291bGQndmUgY2F1Z2h0IGl0IGluIHRoZSBjaGVjayBmb3IgYSBzaG9y dCByZWFkLCBidXQKYmV0dGVyIHRvIGJlIGV4cGxpY2l0IHNvIHRoYXQgdGhlIGVycm9yIG1l c3NhZ2UgaXMgbW9yZSBpbmZvcm1hdGl2ZS4KV2UgYWxzbyBzaG91bGRuJ3QgdXBkYXRlICdp bkVuZCcgd2hlbiB0aGUgcmVhZCBmYWlscywgYWx0aG91Z2ggdGhhdAp0b28gaXMganVzdCBw cm8gZm9ybWEgYXMgd2Ugd2lsbCBiYWlsIG91dCBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24g b24KZXJyb3IuCgpSZXBvcnRlZC1ieTogUGV0ZXIgRWlzZW50cmF1dCA8cGV0ZXJAZWlzZW50 cmF1dC5vcmc+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvMzQ4NDRlOGMtMjY3Yy00ZGFmLWIxZTAtZjI2MDU5YTRhN2QzQGVpc2VudHJhdXQu b3JnCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jICAgfCAxMSArKysrKysr Ky0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgfCAgNSArKystLQogMiBm aWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLW1pc2MuYwppbmRleCBkZDc3MjgzODAwNS4uZjExYjU4YmY5YzcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYworKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1taXNjLmMKQEAgLTkyOCwxMyArOTI4LDE4IEBAIHBxRHJhaW5QZW5k aW5nKFBHY29ubiAqY29ubikKIAogCW5yZWFkID0gcHFzZWN1cmVfcmVhZChjb25uLCBjb25u LT5pbkJ1ZmZlciArIGNvbm4tPmluRW5kLAogCQkJCQkJICBieXRlc19wZW5kaW5nKTsKLQlj b25uLT5pbkVuZCArPSBucmVhZDsKIAotCS8qIFdoZW4gdGhlcmUgYXJlIGJ5dGVzIHBlbmRp bmcsIHRoZSByZWFkIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3NlZCB0byBmYWlsICovCisJLyoK KwkgKiBXaGVuIHRoZXJlIGFyZSBieXRlcyBwZW5kaW5nLCBwcXNlY3VyZV9yZWFkKCkgaXMg bm90IHN1cHBvc2VkIHRvIGZhaWwKKwkgKiBvciBkbyBhIHNob3J0IHJlYWQsIGJ1dCBsZXQn cyBjaGVjayBhbnl3YXkgdG8gYmUgc2FmZS4KKwkgKi8KKwlpZiAobnJlYWQgPCAwKQorCQly ZXR1cm4gLTE7CisJY29ubi0+aW5FbmQgKz0gbnJlYWQ7CiAJaWYgKG5yZWFkICE9IGJ5dGVz X3BlbmRpbmcpCiAJewogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAotCQkJCQkJ CQkiZHJhaW5lZCBvbmx5ICV6dSBvZiAlemQgcGVuZGluZyBieXRlcyBpbiB0cmFuc3BvcnQg YnVmZmVyIiwKKwkJCQkJCQkJImRyYWluZWQgb25seSAlemQgb2YgJXpkIHBlbmRpbmcgYnl0 ZXMgaW4gdHJhbnNwb3J0IGJ1ZmZlciIsCiAJCQkJCQkJCW5yZWFkLCBieXRlc19wZW5kaW5n KTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLXNlY3VyZS5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMKaW5kZXgg NzBmYWY4YjJmZTAuLjFhOGUyZTY3NDZlIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1zZWN1cmUuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUu YwpAQCAtMjQ3LDggKzI0Nyw5IEBAIHBxc2VjdXJlX3Jhd19yZWFkKFBHY29ubiAqY29ubiwg dm9pZCAqcHRyLCBzaXplX3QgbGVuKQogICoJUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMg YXZhaWxhYmxlIGluIHRoZSB0cmFuc3BvcnQgYnVmZmVyLgogICoKICAqIElmIHBxc2VjdXJl X3JlYWQoKSBpcyBjYWxsZWQgZm9yIHRoaXMgbnVtYmVyIG9mIGJ5dGVzLCBpdCdzIGd1YXJh bnRlZWQgdG8KLSAqIHJldHVybiBzdWNjZXNzZnVsbHkgd2l0aG91dCByZWFkaW5nIGZyb20g dGhlIHVuZGVybHlpbmcgc29ja2V0LiAgU2VlCi0gKiBwcURyYWluUGVuZGluZygpIGZvciBh IG1vcmUgY29tcGxldGUgZGlzY3Vzc2lvbiBvZiB0aGUgY29uY2VwdHMgaW52b2x2ZWQuCisg KiByZXR1cm4gc3VjY2Vzc2Z1bGx5IHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGJ5dGVzLCB3 aXRob3V0IHJlYWRpbmcgZnJvbSB0aGUKKyAqIHVuZGVybHlpbmcgc29ja2V0LiAgU2VlIHBx RHJhaW5QZW5kaW5nKCkgZm9yIGEgbW9yZSBjb21wbGV0ZSBkaXNjdXNzaW9uIG9mCisgKiB0 aGUgY29uY2VwdHMgaW52b2x2ZWQuCiAgKi8KIHNzaXplX3QKIHBxc2VjdXJlX2J5dGVzX3Bl bmRpbmcoUEdjb25uICpjb25uKQotLSAKMi40Ny4zCgo= --------------aoKvjaTWbhpUcYZaeBAQgM5X--