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 1wfa9C-005WZM-1Z for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 09:25:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfa9B-006W7v-0V for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 09:25:21 +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 1wfa9A-006W7m-2D for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 09:25:20 +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 1wfa98-00000001ROW-0b0S for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 09:25:20 +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 4gs7dM1CZ2z49Q5N; Fri, 03 Jul 2026 12:25:11 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1783070712; 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=zgILZFETf5j/E78JkIVMCnR2YTSrtEvc1dZTJD1EFIw=; b=nCoje173dZHXIj0ipshwrYr4wBHKWOQ3CtlLSZGHNWzSvd3lDsZX25zRSkxGrOj8GAP2Nr 68iMkjJJeaD3/0DSKoUJVU7hpXLH2PjZLGW0yC/eB5boHm3ZhcHjKwgxMgIomXf+28FT/D 7Yct98cKpa33aHaDfGwKtG3aa68ZkvXH9ZzAZOR0tegXaXCKX86SjNqestYAjPRyWa+fH3 tviYukUUiKAROMXEZBge5h26w2LKBMUNJP6CeAex4ZxQBGZw8UklLa66Hq91cDyI4cVJPF kIQyEWRhx4NUlWV0Sfm51zF68oRmybNYruNYGtlxrnj4yFFre9J8k1GY0y23Mw== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1783070712; b=kyyJ8m6uWB8fh7tpVGQLzumuMSU/CUjrhR35SpEF7jl6pYB3d4Phstqy11Sob+walqhdnQ ZZfxEuOHwtgDcHGoUs7PLh6Fij4ZdsSk99bWtVlnnTebIVdKHsg9rIVIVVf+V5wOYu/w1T +IZusIkj4gmaNBs4FSOUwzjHryPMnBrmAcLb2iUTIOHHHElcRR6bhbe6yWnICcpMIORFW/ GccvwOrttNPcFXzGp0K8XCBIucIObGMZg06R3q96gRawDrQUbVoMEhB09vUvzLp8/As3fj qZcg6oKuT1NVTsEZAn+9r6VjRSh+U+tQlSuE8CKPpiIM8lN7sE8VbyQcCyKK1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1783070712; 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=zgILZFETf5j/E78JkIVMCnR2YTSrtEvc1dZTJD1EFIw=; b=oL2nhRayAyT2op9yXUiU1s26HsBEgfqIpDxhQUjFfKGfTv8I/rBo5v+Mf/G+RzZRqNtm7t T9wNZrO62JppIJSNYhW+7wpKIwfKHEc+RW6HBEnZOYa22ohb9G9q5jkk2dzchIkmr4sHSc yr8tzUupeE9jy5tcy5+4JhzaS7x1fud8PE8rvbhS5GruT6o3TrDvIfISUAsj7H7Jlzf+Q4 nBAwr6Ke8qEN2gzaUSgzYw0qqKWJyJ/NMUqIaZ1wKb4M7EEiDYRpFWf+lWAG065L0lTtzK BZULlJveFkzbRkKIJzi/MpO7gHc1qFMGFxRk53xhR7ICm8W1pfBlFwI1RtJ6hw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------jjc0of4rFnfkuV01S4NKKg2H" Message-ID: <990a4710-fed1-411a-aba4-ddc25825ee48@iki.fi> Date: Fri, 3 Jul 2026 12:25:10 +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: solai v Cc: Mark Dilger , Jacob Champion , 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> Content-Language: en-US From: Heikki Linnakangas 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. --------------jjc0of4rFnfkuV01S4NKKg2H Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 14/05/2026 07:32, solai v wrote: > Hi, > i tested the latest V3 patch series on current postgreSQL HEAD with SSL > enabled.The patches applied cleanly,build succeeded,and the server > started successfully.I ran the async libpq test repeatedly and also > tested large COPY TO STDOUT operations over SSL.I did not observe > hangs,crashes,or visible regressions during testing. Thanks for the testing! Here's another patch version, with some small comment and commit message changes, and I split the changes slightly differently between the two patches. End result is otherwise the same. I plan to commit this in the next few days. This question still remains: > In pqReadData we have this: > > >> /* >> * A return value of 0 could mean just that no data is now available, or >> * it could mean EOF --- that is, the server has closed the connection. >> * Since we have the socket in nonblock mode, the only way to tell the >> * difference is to see if select() is saying that the file is ready. >> * Grumble. Fortunately, we don't expect this path to be taken much, >> * since in normal practice we should not be trying to read data unless >> * the file selected for reading already. >> * >> * In SSL mode it's even worse: SSL_read() could say WANT_READ and then >> * data could arrive before we make the pqReadReady() test, but the second >> * SSL_read() could still say WANT_READ because the data received was not >> * a complete SSL record. So we must play dumb and assume there is more >> * data, relying on the SSL layer to detect true EOF. >> */ >> >> #ifdef USE_SSL >> if (conn->ssl_in_use) >> return 0; >> #endif > > > Should we do the same for GSS as we do for SSL here? If someone more familiar with GSS would take a look at that, that'd be great. I assume that it has the same issue, and we should do the same for GSS as for SSL here. That's additional to these patches, though, so it doesn't prevent committing these now. - Heikki --------------jjc0of4rFnfkuV01S4NKKg2H Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-libpq-Extend-read-pending-check-from-SSL-to-GSS.patch" Content-Disposition: attachment; filename*0="v4-0001-libpq-Extend-read-pending-check-from-SSL-to-GSS.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSBmY2ZlYmUwNGM4MjhhNWYxZWNmYjUyNzk1Y2M2M2ZjZWM3MDY0OTA4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMyBKdWwgMjAyNiAxMjowNzoxOCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjQgMS8yXSBsaWJwcTogRXh0ZW5kICJyZWFkIHBlbmRpbmciIGNo ZWNrIGZyb20gU1NMIHRvIEdTUwoKQW4gZXh0cmEgY2hlY2sgZm9yIHBlbmRpbmcgYnl0ZXMg aW4gdGhlIFNTTCBsYXllciBoYXMgYmVlbiBwYXJ0IG9mCnBxUmVhZFJlYWR5KCkgZm9yIGEg dmVyeSBsb25nIHRpbWUgKDc5ZmYyZTk2ZCkuIEJ1dCB3aGVuIEdTUyB0cmFuc3BvcnQKZW5j cnlwdGlvbiB3YXMgYWRkZWQsIGl0IGRpZG4ndCByZWNlaXZlIHRoZSBzYW1lIHRyZWF0bWVu dC4gKEFzCjc5ZmYyZTk2ZCBub3RlcywgIlRoZSBidWcgdGhhdCBJIGZpeGVkIGluIHRoaXMg cGF0Y2ggaXMgZXhjZXB0aW9uYWxseQpoYXJkIHRvIHJlcHJvZHVjZSByZWxpYWJseS4iKQoK V2l0aG91dCB0aGF0IGNoZWNrLCBpdCdzIHBvc3NpYmxlIHRvIGhpdCBhIGhhbmcgaW4gZ3Nz ZW5jbW9kZSwgaWYgdGhlCnNlcnZlciBzcGxpdHMgYSBsYXJnZSBsaWJwcSBtZXNzYWdlIHN1 Y2ggdGhhdCB0aGUgZmluYWwgbWVzc2FnZSBpbiBhCnN0cmVhbWVkIHJlc3BvbnNlIGlzIHBh cnQgb2YgdGhlIHNhbWUgd3JhcHBlZCB0b2tlbiBhcyB0aGUgc3BsaXQKbWVzc2FnZToKCiAg ICBEYXRhUm93RGF0YVJvd0RhdGFSb3dEYXRhUm93RGF0YVJvd0RhdGEKICAgIC0tIHRva2Vu IGJvdW5kYXJ5IC0tCiAgICBSb3dEYXRhUm93Q29tbWFuZENvbXBsZXRlUmVhZHlGb3JRdWVy eQoKSWYgdGhlIHNwbGl0IG1lc3NhZ2UgdGFrZXMgdXAgZW5vdWdoIG1lbW9yeSB0byBuZWFy bHkgZmlsbCBsaWJwcSdzCnJlY2VpdmUgYnVmZmVyLCBsaWJwcSBtYXkgcmV0dXJuIGZyb20g cHFSZWFkRGF0YSgpIGJlZm9yZSB0aGUgbGF0ZXIKbWVzc2FnZXMgYXJlIHB1bGxlZCBvdXQg b2YgdGhlIFBxR1NTUmVjdkJ1ZmZlci4gV2l0aG91dCBhZGRpdGlvbmFsCnNvY2tldCBhY3Rp dml0eSBmcm9tIHRoZSBzZXJ2ZXIsIHBxUmVhZFJlYWR5KCkgKHZpYSBwcVNvY2tldENoZWNr KCkpCndpbGwgbmV2ZXIgYWdhaW4gcmV0dXJuIHRydWUsIGhhbmdpbmcgdGhlIGNvbm5lY3Rp b24uCgpQdWxsIHRoZSBwZW5kaW5nLWJ5dGVzIGNoZWNrIGludG8gdGhlIHBxc2VjdXJlIEFQ SSBsYXllciwgd2hlcmUgYm90aApTU0wgYW5kIEdTUyBub3cgaW1wbGVtZW50IGl0LgoKTm90 ZSB0aGF0IHRoaXMgZG9lcyBub3QgZml4IHRoZSByb290IHByb2JsZW0hIFRoaXJkIHBhcnR5 IGNsaWVudHMgb2YKbGlicHEgaGF2ZSBubyB3YXkgdG8gY2FsbCBwcXNlY3VyZV9yZWFkX2lz X3BlbmRpbmcoKSBpbiB0aGVpciBvd24KcG9sbGluZy4gVGhpcyBqdXN0IGJyaW5ncyB0aGUg R1NTIGltcGxlbWVudGF0aW9uIHVwIHRvIHBhciB3aXRoIHRoZQpleGlzdGluZyBTU0wgd29y a2Fyb3VuZDsgYSBicm9hZGVyIGZpeCBpcyBsZWZ0IHRvIGEgc3Vic2VxdWVudCBjb21taXQu CgpJbiBwcmVwYXJhdGlvbiBmb3IgdGhlIGJyb2FkZXIgZml4LCB0aGlzIHBhdGNoIGFscmVh ZHkgY2hhbmdlcyB0aGUKKl9yZWFkX3BlbmRpbmcoKSBmdW5jdGlvbnMgdG8gcmV0dXJuIHRo ZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlcgpyYXRoZXIgdGhhbiBqdXN0IGEgYm9v bGVhbi4gVGhlIGN1cnJlbnQgY2FsbGVycyBkb24ndCBuZWVkIHRoYXQsIGJ1dAp0aGUgc3Vi c2VxdWVudCBmaXggd2lsbC4KCkF1dGhvcjogSmFjb2IgQ2hhbXBpb24gPGphY29iLmNoYW1w aW9uQGVudGVycHJpc2VkYi5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v Q0FPWW1pJTJCbXB5bXJnWjc2SnJlMmR4X1B3Um5pUzlZWm9qd0gwclpuVHVpR0hDc2owckEl NDBtYWlsLmdtYWlsLmNvbQpCYWNrcGF0Y2gtdGhyb3VnaDogMTQKLS0tCiBzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1taXNjLmMgICAgICAgICAgIHwgIDYgKystLS0KIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLXNlY3VyZS1nc3NhcGkuYyAgfCAgNyArKysrKwogc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYyB8IDM0ICsrKysrKysrKysrKysrKysrKysr Ky0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgICAgICAgICB8IDIyICsr KysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAgICAg ICB8ICA2ICsrKy0tCiA1IGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKyksIDkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5j IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCmluZGV4IDkwNTM0NGQ1YzM4Li41 OGNjY2ExZTM5MyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5j CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYwpAQCAtMTA5OSwxNCArMTA5 OSwxMiBAQCBwcVNvY2tldENoZWNrKFBHY29ubiAqY29ubiwgaW50IGZvclJlYWQsIGludCBm b3JXcml0ZSwgcGdfdXNlY190aW1lX3QgZW5kX3RpbWUpCiAJCQlyZXR1cm4gLTE7CiAJCX0K IAotI2lmZGVmIFVTRV9TU0wKLQkJLyogQ2hlY2sgZm9yIFNTTCBsaWJyYXJ5IGJ1ZmZlcmlu ZyByZWFkIGJ5dGVzICovCi0JCWlmIChmb3JSZWFkICYmIGNvbm4tPnNzbF9pbl91c2UgJiYg cGd0bHNfcmVhZF9wZW5kaW5nKGNvbm4pKQorCQkvKiBDaGVjayBmb3IgU1NML0dTUyBsaWJy YXJ5IGJ1ZmZlcmluZyByZWFkIGJ5dGVzICovCisJCWlmIChmb3JSZWFkICYmIHBxc2VjdXJl X2J5dGVzX3BlbmRpbmcoY29ubikgIT0gMCkKIAkJewogCQkJLyogc2hvcnQtY2lyY3VpdCB0 aGUgc2VsZWN0ICovCiAJCQlyZXR1cm4gMTsKIAkJfQotI2VuZGlmCiAJfQogCiAJLyogV2Ug d2lsbCByZXRyeSBhcyBsb25nIGFzIHdlIGdldCBFSU5UUiAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLWdzc2FwaS5jIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtc2VjdXJlLWdzc2FwaS5jCmluZGV4IDcyZjQzOGRmYTljLi5jYzYwMjQwNTgy ZCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLWdzc2FwaS5j CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1nc3NhcGkuYwpAQCAtNDcx LDYgKzQ3MSwxMyBAQCBnc3NfcmVhZChQR2Nvbm4gKmNvbm4sIHZvaWQgKnJlY3ZfYnVmZmVy LCBzaXplX3QgbGVuZ3RoLCBzc2l6ZV90ICpyZXQpCiAJcmV0dXJuIFBHUkVTX1BPTExJTkdf T0s7CiB9CiAKK3NzaXplX3QKK3BnX0dTU19ieXRlc19wZW5kaW5nKFBHY29ubiAqY29ubikK K3sKKwlBc3NlcnQoUHFHU1NSZXN1bHRMZW5ndGggPj0gUHFHU1NSZXN1bHROZXh0KTsKKwly ZXR1cm4gKHNzaXplX3QpIChQcUdTU1Jlc3VsdExlbmd0aCAtIFBxR1NTUmVzdWx0TmV4dCk7 Cit9CisKIC8qCiAgKiBOZWdvdGlhdGUgR1NTQVBJIHRyYW5zcG9ydCBmb3IgYSBjb25uZWN0 aW9uLiAgV2hlbiBjb21wbGV0ZSwgcmV0dXJucwogICogUEdSRVNfUE9MTElOR19PSy4gIFdp bGwgcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORyBvcgpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYyBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMKaW5kZXggNmI0NGVlYjY4ZWIuLjFiMjJiYTdiN2Y2 IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5j CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMKQEAgLTIz MCwxMCArMjMwLDM4IEBAIHJsb29wOgogCXJldHVybiBuOwogfQogCi1ib29sCi1wZ3Rsc19y ZWFkX3BlbmRpbmcoUEdjb25uICpjb25uKQorc3NpemVfdAorcGd0bHNfYnl0ZXNfcGVuZGlu ZyhQR2Nvbm4gKmNvbm4pCiB7Ci0JcmV0dXJuIFNTTF9wZW5kaW5nKGNvbm4tPnNzbCkgPiAw OworCWludAkJCXBlbmRpbmc7CisKKwkvKgorCSAqIE9wZW5TU0wgcmVhZGFoZWFkIGlzIGRv Y3VtZW50ZWQgdG8gYnJlYWsgU1NMX3BlbmRpbmcoKS4KKwkgKi8KKwlBc3NlcnQoIVNTTF9n ZXRfcmVhZF9haGVhZChjb25uLT5zc2wpKTsKKworCXBlbmRpbmcgPSBTU0xfcGVuZGluZyhj b25uLT5zc2wpOworCWlmIChwZW5kaW5nIDwgMCkKKwl7CisJCS8qIHNob3VsZG4ndCBiZSBw b3NzaWJsZSAqLworCQlBc3NlcnQoZmFsc2UpOworCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJv cihjb25uLCAiT3BlblNTTCByZXBvcnRzIG5lZ2F0aXZlIGJ5dGVzIHBlbmRpbmciKTsKKwkJ cmV0dXJuIC0xOworCX0KKwllbHNlIGlmIChwZW5kaW5nID09IElOVF9NQVgpCisJeworCQkv KgorCQkgKiBJZiB3ZSBldmVyIGZvdW5kIGEgbGVnaXRpbWF0ZSB3YXkgdG8gaGl0IHRoaXMs IHdlJ2QgbmVlZCB0byBsb29wCisJCSAqIGFyb3VuZCBpbiB0aGUgY2FsbGVyIHRvIGNhbGwg cGd0bHNfYnl0ZXNfcGVuZGluZygpIGFnYWluLiAgVGhyb3cgYW4KKwkJICogZXJyb3IgcmF0 aGVyIHRoYW4gY29tcGxpY2F0ZSB0aGUgY29kZSBpbiB0aGF0IHdheSwgYmVjYXVzZQorCQkg KiBTU0xfcmVhZCgpIHNob3VsZCBiZSBib3VuZGVkIHRvIHRoZSBzaXplIG9mIGEgc2luZ2xl IFRMUyByZWNvcmQsCisJCSAqIGFuZCBjb25uLT5pbkJ1ZmZlciBjYW4ndCBjdXJyZW50bHkg Z28gcGFzdCBJTlRfTUFYIGluIHNpemUgYW55d2F5LgorCQkgKi8KKwkJbGlicHFfYXBwZW5k X2Nvbm5fZXJyb3IoY29ubiwgIk9wZW5TU0wgcmVwb3J0cyBJTlRfTUFYIGJ5dGVzIHBlbmRp bmciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAoc3NpemVfdCkgcGVuZGluZzsK IH0KIAogc3NpemVfdApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2Vj dXJlLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUuYwppbmRleCAzMWQ1YjQ4 ZDNmOS4uOTA3Y2RiOWVhMzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LXNlY3VyZS5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5jCkBAIC0y NDMsNiArMjQzLDI4IEBAIHBxc2VjdXJlX3Jhd19yZWFkKFBHY29ubiAqY29ubiwgdm9pZCAq cHRyLCBzaXplX3QgbGVuKQogCXJldHVybiBuOwogfQogCisvKgorICoJUmV0dXJuIHRoZSBu dW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSB0cmFuc3BvcnQgYnVmZmVyLgorICoK KyAqIElmIHBxc2VjdXJlX3JlYWQoKSBpcyBjYWxsZWQgZm9yIHRoaXMgbnVtYmVyIG9mIGJ5 dGVzLCBpdCdzIGd1YXJhbnRlZWQgdG8KKyAqIHJldHVybiBzdWNjZXNzZnVsbHkgd2l0aG91 dCByZWFkaW5nIGZyb20gdGhlIHVuZGVybHlpbmcgc29ja2V0LgorICovCitzc2l6ZV90Citw cXNlY3VyZV9ieXRlc19wZW5kaW5nKFBHY29ubiAqY29ubikKK3sKKyNpZmRlZiBVU0VfU1NM CisJaWYgKGNvbm4tPnNzbF9pbl91c2UpCisJCXJldHVybiBwZ3Rsc19ieXRlc19wZW5kaW5n KGNvbm4pOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX0dTUworCWlmIChjb25uLT5nc3NlbmMp CisJCXJldHVybiBwZ19HU1NfYnl0ZXNfcGVuZGluZyhjb25uKTsKKyNlbmRpZgorCisJLyog UGxhaW50ZXh0IGNvbm5lY3Rpb25zIGhhdmUgbm8gdHJhbnNwb3J0IGJ1ZmZlci4gKi8KKwly ZXR1cm4gMDsKK30KKwogLyoKICAqCVdyaXRlIGRhdGEgdG8gYSBzZWN1cmUgY29ubmVjdGlv bi4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCmluZGV4IDQ2MWIzOTYyMGMzLi4z ZjkyMTIwN2ExNCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50 LmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKQEAgLTgyNyw2ICs4 MjcsNyBAQCBleHRlcm4gaW50CXBxV3JpdGVSZWFkeShQR2Nvbm4gKmNvbm4pOwogZXh0ZXJu IFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgcHFzZWN1cmVfb3Blbl9jbGllbnQoUEdjb25u ICopOwogZXh0ZXJuIHZvaWQgcHFzZWN1cmVfY2xvc2UoUEdjb25uICopOwogZXh0ZXJuIHNz aXplX3QgcHFzZWN1cmVfcmVhZChQR2Nvbm4gKiwgdm9pZCAqcHRyLCBzaXplX3QgbGVuKTsK K2V4dGVybiBzc2l6ZV90IHBxc2VjdXJlX2J5dGVzX3BlbmRpbmcoUEdjb25uICopOwogZXh0 ZXJuIHNzaXplX3QgcHFzZWN1cmVfd3JpdGUoUEdjb25uICosIGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IGxlbik7CiBleHRlcm4gc3NpemVfdCBwcXNlY3VyZV9yYXdfcmVhZChQR2Nvbm4g Kiwgdm9pZCAqcHRyLCBzaXplX3QgbGVuKTsKIGV4dGVybiBzc2l6ZV90IHBxc2VjdXJlX3Jh d193cml0ZShQR2Nvbm4gKiwgY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKTsKQEAgLTg2 Myw5ICs4NjQsOSBAQCBleHRlcm4gdm9pZCBwZ3Rsc19jbG9zZShQR2Nvbm4gKmNvbm4pOwog ZXh0ZXJuIHNzaXplX3QgcGd0bHNfcmVhZChQR2Nvbm4gKmNvbm4sIHZvaWQgKnB0ciwgc2l6 ZV90IGxlbik7CiAKIC8qCi0gKglJcyB0aGVyZSB1bnJlYWQgZGF0YSB3YWl0aW5nIGluIHRo ZSBTU0wgcmVhZCBidWZmZXI/CisgKglSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhdmFp bGFibGUgaW4gdGhlIHRyYW5zcG9ydCBidWZmZXIuCiAgKi8KLWV4dGVybiBib29sIHBndGxz X3JlYWRfcGVuZGluZyhQR2Nvbm4gKmNvbm4pOworZXh0ZXJuIHNzaXplX3QgcGd0bHNfYnl0 ZXNfcGVuZGluZyhQR2Nvbm4gKmNvbm4pOwogCiAvKgogICoJV3JpdGUgZGF0YSB0byBhIHNl Y3VyZSBjb25uZWN0aW9uLgpAQCAtOTEzLDYgKzkxNCw3IEBAIGV4dGVybiBQb3N0Z3Jlc1Bv bGxpbmdTdGF0dXNUeXBlIHBxc2VjdXJlX29wZW5fZ3NzKFBHY29ubiAqY29ubik7CiAgKi8K IGV4dGVybiBzc2l6ZV90IHBnX0dTU193cml0ZShQR2Nvbm4gKmNvbm4sIGNvbnN0IHZvaWQg KnB0ciwgc2l6ZV90IGxlbik7CiBleHRlcm4gc3NpemVfdCBwZ19HU1NfcmVhZChQR2Nvbm4g KmNvbm4sIHZvaWQgKnB0ciwgc2l6ZV90IGxlbik7CitleHRlcm4gc3NpemVfdCBwZ19HU1Nf Ynl0ZXNfcGVuZGluZyhQR2Nvbm4gKmNvbm4pOwogI2VuZGlmCiAKIC8qID09PSBpbiBmZS10 cmFjZS5jID09PSAqLwotLSAKMi40Ny4zCgo= --------------jjc0of4rFnfkuV01S4NKKg2H Content-Type: text/x-patch; charset=UTF-8; name="v4-0002-libpq-Drain-all-pending-bytes-from-SSL-GSS-during.patch" Content-Disposition: attachment; filename*0="v4-0002-libpq-Drain-all-pending-bytes-from-SSL-GSS-during.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4MzgzYTAwZTdhMmZlMWYxMzE0MTZmYjYzZTVlMzRmZWRmNjU4MjQzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMyBKdWwgMjAyNiAxMjoyMDoyNiArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjQgMi8yXSBsaWJwcTogRHJhaW4gYWxsIHBlbmRpbmcgYnl0ZXMg ZnJvbSBTU0wvR1NTIGR1cmluZwogcHFSZWFkRGF0YSgpCgpUaGUgcHJldmlvdXMgY29tbWl0 IHN0cmVuZ3RoZW5lZCBhIHdvcmthcm91bmQgZm9yIGEgaGFuZyB3aGVuIGxhcmdlCm1lc3Nh Z2VzIGFyZSBzcGxpdCBhY3Jvc3MgVExTIHJlY29yZHMvR1NTIHRva2Vucy4gQmVjYXVzZSB0 aGF0Cndvcmthcm91bmQgaXMgaW1wbGVtZW50ZWQgaW4gbGlicHEgaW50ZXJuYWxzLCBpdCBj YW4gb25seSBoZWxwIHVzIHdoZW4KbGlicHEgaXRzZWxmIGlzIHBvbGxpbmcgb24gdGhlIHNv Y2tldC4gSW4gbm9uYmxvY2tpbmcgc2l0dWF0aW9ucywKd2hlcmUgdGhlIGNsaWVudCBhYm92 ZSBsaWJwcSBpcyBleHBlY3RlZCB0byBwb2xsLCB0aGUgc2FtZSBidWdzIGNhbgpzaG93IHVw LgoKQXMgYSBjb250cml2ZWQgZXhhbXBsZSwgY29uc2lkZXIgYSBsYXJnZSBwcm90b2NvbC0y LjAgZXJyb3IgY29taW5nCmJhY2sgZnJvbSBhIHNlcnZlciBkdXJpbmcgUFFjb25uZWN0UG9s bCgpLCBzcGxpdCBpbiBhbiBvZGQgd2F5IGFjcm9zcwp0d28gcmVjb3JkczoKCiAgICAtLSBU TFMgcmVjb3JkICg4MTkyLWJ5dGUgcGF5bG9hZCkgLS0KICAgIEVFRUVbLi4ucmVwZWF0ZWQg YSB0b3RhbCBvZiA4MTkyIHRpbWVzXQogICAgLS0gVExTIHJlY29yZCAoODE5My1ieXRlIHBh eWxvYWQpIC0tCiAgICBFRUVFWy4uLnJlcGVhdGVkIGEgdG90YWwgb2YgODE5MiB0aW1lc11c MAoKVGhlIGZpcnN0IHJlY29yZCB3aWxsIGZpbGwgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGxp YnBxIHJlY2VpdmUgYnVmZmVyLAp3aGljaCBpcyAxNmsgbG9uZyBieSBkZWZhdWx0LiBUaGUg c2Vjb25kIHJlY29yZCBjb21wbGV0ZWx5IGZpbGxzIHRoZQpsYXN0IGhhbGYgd2l0aCBpdHMg Zmlyc3QgODE5MiBieXRlcywgbGVhdmluZyB0aGUgdGVybWluYXRpbmcgTlVMTCBpbgp0aGUg T3BlblNTTCBidWZmZXIuIFNpbmNlIHdlIHN0aWxsIGhhdmVuJ3Qgc2VlbiB0aGUgdGVybWlu YXRvciBhdCBvdXIKbGV2ZWwsIFBRY29ubmVjdFBvbGwoKSB3aWxsIHJldHVybiBQR1JFU19Q T0xMSU5HX1JFQURJTkcsIGV4cGVjdGluZyB0bwpjb21lIGJhY2sgd2hlbiB0aGUgc2VydmVy IGhhcyBzZW50ICJ0aGUgcmVzdCIgb2YgdGhlIGRhdGEuICBCdXQgdGhlcmUKaXMgbm90aGlu ZyBsZWZ0IHRvIHJlYWQgZnJvbSB0aGUgc29ja2V0OyBPcGVuU1NMIGhhZCB0byBwdWxsIGFs bCBvZgp0aGUgZGF0YSBpbiB0aGUgODE5My1ieXRlIHJlY29yZCBvZmYgb2YgdGhlIHdpcmUg dG8gZGVjcnlwdCBpdC4KCkEgcmVhbCBzZXJ2ZXIgd291bGQgcHJvYmFibHkgbm90IHNwbGl0 IHVwIHRoZSByZWNvcmRzIHRoaXMgd2F5LCBub3IKa2VlcCB0aGUgY29ubmVjdGlvbiBvcGVu IGFmdGVyIHNlbmRpbmcgYSBmYXRhbCBjb25uZWN0aW9uIGVycm9yLiBCdXQKc2VydmVycyB0 aGF0IHJlZ3VsYXJseSB1c2UgbGFyZ2VyIFRMUyByZWNvcmRzIGNhbiBnZXQgdGhlIGxpYnBx CnJlY2VpdmUgYnVmZmVyIGludG8gdGhlIHNhbWUgc3RhdGUgaWYgRGF0YVJvd3MgYXJlIGJp ZyBlbm91Z2gsIGFzCnJlcG9ydGVkIG9uIHRoZSBsaXN0LiBXaGlsZSB0aGUgUG9zdGdyZVNR TCBzZXJ2ZXIgZG9lc24ndCB1c2UgbGFyZ2VyClRMUyByZWNvcmRzIGxpa2UgdGhhdCwgb3Ro ZXIgbm9uLVBvc3RncmVTUUwgc2VydmVycyB0aGF0IGltcGxlbWVudCB0aGUKd2lyZSBwcm90 b2NvbCBhcmUga25vd24gdG8gZG8gdGhhdCwgYXMgd2VsbCBhcyBwcm94aWVzIHRoYXQgc2l0 CmJldHdlZW4gdGhlIHNlcnZlciBhbmQgdGhlIGNsaWVudAoKVGhpcyBpcyBhIGxheWVyaW5n IHZpb2xhdGlvbi4gbGlicHEgbWFrZXMgZGVjaXNpb25zIGJhc2VkIG9uIGRhdGEgaW4KdGhl IGFwcGxpY2F0aW9uIGJ1ZmZlciwgYWJvdmUgdGhlIHRyYW5zcG9ydCBidWZmZXIgKHdoZXRo ZXIgU1NMIG9yCkdTUyksIGJ1dCBjbGllbnRzIGFyZSBwb2xsaW5nIHRoZSBzb2NrZXQgYmVs b3cgdGhlIHRyYW5zcG9ydCBidWZmZXIuCk9uZSB3YXkgdG8gZml4IHRoaXMgaW4gYSBiYWNr cG9ydGFibGUgd2F5LCB3aXRob3V0IGNoYW5naW5nIEFQSXMgdG9vCm11Y2gsIGlzIHRvIGVu c3VyZSBkYXRhIG5ldmVyIHN0YXlzIGluIHRoZSB0cmFuc3BvcnQgYnVmZmVyLiBUaGVuCnBx UmVhZERhdGEncyBwb3N0Y29uZGl0aW9ucyB3aWxsIGxvb2sgc2ltaWxhciBmb3IgYm90aCBy YXcgc29ja2V0cyBhbmQKU1NML0dTUzogYW55IGF2YWlsYWJsZSBkYXRhIGlzIGVpdGhlciBp biB0aGUgYXBwbGljYXRpb24gYnVmZmVyLCBvcgpzdGlsbCBvbiB0aGUgc29ja2V0LgoKQnVp bGRpbmcgb24gdGhlIHByaW9yIGNvbW1pdCwgbWFrZSBwcVJlYWREYXRhKCkgdG8gZHJhaW4g YWxsIHBlbmRpbmcKZGF0YSBmcm9tIHRoZSB0cmFuc3BvcnQgbGF5ZXIgaW50byBjb25uLT5p bkJ1ZmZlciwgZXhwYW5kaW5nIHRoZQpidWZmZXIgYXMgbmVjZXNzYXJ5LiBUaGlzIGlzIG5v dCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IGZyb20gYW4KYXJjaGl0ZWN0dXJhbCBwZXJzcGVj dGl2ZSAodGhlIHBxc2VjdXJlX3JlYWQoKSBpbXBsZW1lbnRhdGlvbnMgdGFrZQpjYXJlIHRv IGZpdCB0aGVpciBwYWNrZXRzIGludG8gdGhlIGN1cnJlbnQgYnVmZmVyLCBhbmQgdGhhdCBl ZmZvcnQgaXMKbm93IGNvbXBsZXRlbHkgZGlzY2FyZGVkKSwgYnV0IGl0J3MgaG9wZWZ1bGx5 IGVhc2llciB0byByZWFzb24gYWJvdXQKdGhhbiBhIGZ1bGwgcmV3cml0ZSB3b3VsZCBiZSBm b3IgdGhlIGJhY2sgYnJhbmNoZXMuCgpBdXRob3I6IEphY29iIENoYW1waW9uIDxqYWNvYi5j aGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogTWFyayBEaWxnZXIgPG1h cmsuZGlsZ2VyQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBzb2xhaSB2IDxzb2xh aS5jZGFjQGdtYWlsLmNvbT4KUmVwb3J0ZWQtYnk6IExhcnMgS2FuaXMgPGxhcnNAZ3JlaXot cmVpbnNkb3JmLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMzlhYzU4 LWQzZTAtNDM0Yi1hYzFhLTJhOTg3ZjNiNGNiMSU0MGdyZWl6LXJlaW5zZG9yZi5kZQpCYWNr cGF0Y2gtdGhyb3VnaDogMTQKLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1taXNjLmMg ICAgICAgICAgIHwgMTQ1ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jIHwgICA0ICstCiBzcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1zZWN1cmUuYyAgICAgICAgIHwgICAzICstCiAzIGZpbGVzIGNoYW5nZWQsIDE0 OCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2ZlLW1pc2MuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2Mu YwppbmRleCA1OGNjY2ExZTM5My4uZGQ3NzI4MzgwMDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2ZlLW1pc2MuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1t aXNjLmMKQEAgLTU1LDYgKzU1LDggQEAgc3RhdGljIGludAlwcVB1dE1zZ0J5dGVzKGNvbnN0 IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgUEdjb25uICpjb25uKTsKIHN0YXRpYyBpbnQJcHFT ZW5kU29tZShQR2Nvbm4gKmNvbm4sIGludCBsZW4pOwogc3RhdGljIGludAlwcVNvY2tldENo ZWNrKFBHY29ubiAqY29ubiwgaW50IGZvclJlYWQsIGludCBmb3JXcml0ZSwKIAkJCQkJCSAg cGdfdXNlY190aW1lX3QgZW5kX3RpbWUpOworc3RhdGljIGludAlwcVJlYWREYXRhX2ludGVy bmFsKFBHY29ubiAqY29ubik7CitzdGF0aWMgaW50CXBxRHJhaW5QZW5kaW5nKFBHY29ubiAq Y29ubik7CiAKIC8qCiAgKiBQUWxpYlZlcnNpb246IHJldHVybiB0aGUgbGlicHEgdmVyc2lv biBudW1iZXIKQEAgLTU5Myw2ICs1OTUsMTMgQEAgcHFQdXRNc2dFbmQoUEdjb25uICpjb25u KQogCiAvKiAtLS0tLS0tLS0tCiAgKiBwcVJlYWREYXRhOiByZWFkIG1vcmUgZGF0YSwgaWYg YW55IGlzIGF2YWlsYWJsZQorICoKKyAqIFVwb24gYSBzdWNjZXNzZnVsIHJldHVybiwgY2Fs bGVycyBtYXkgYXNzdW1lIHRoYXQgZWl0aGVyIDEpIGFsbCBhdmFpbGFibGUKKyAqIGJ5dGVz IGhhdmUgYmVlbiBjb25zdW1lZCBmcm9tIHRoZSBzb2NrZXQsIG9yIDIpIHRoZSBzb2NrZXQg aXMgc3RpbGwgbWFya2VkCisgKiByZWFkYWJsZSBieSB0aGUgT1MuICAoSW4gb3RoZXIgd29y ZHM6IGFmdGVyIGEgc3VjY2Vzc2Z1bCBwcVJlYWREYXRhLCBpdCdzCisgKiBzYWZlIHRvIHRl bGwgYSBjbGllbnQgdG8gcG9sbCBmb3IgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHNvY2tldCB3 aXRob3V0IGFueQorICogZnVydGhlciBkcmFpbmluZyBvZiB0aGUgU1NML0dTUyB0cmFuc3Bv cnQgYnVmZmVycy4pCisgKgogICogUG9zc2libGUgcmV0dXJuIHZhbHVlczoKICAqCSAxOiBz dWNjZXNzZnVsbHkgbG9hZGVkIGF0IGxlYXN0IG9uZSBtb3JlIGJ5dGUKICAqCSAwOiBubyBk YXRhIGlzIHByZXNlbnRseSBhdmFpbGFibGUsIGJ1dCBubyBlcnJvciBkZXRlY3RlZApAQCAt NjA1LDggKzYxNCw3IEBAIHBxUHV0TXNnRW5kKFBHY29ubiAqY29ubikKIGludAogcHFSZWFk RGF0YShQR2Nvbm4gKmNvbm4pCiB7Ci0JaW50CQkJc29tZXJlYWQgPSAwOwotCWludAkJCW5y ZWFkOworCWludAkJCWF2YWlsYWJsZTsKIAogCWlmIChjb25uLT5zb2NrID09IFBHSU5WQUxJ RF9TT0NLRVQpCiAJewpAQCAtNjE0LDYgKzYyMiw0MCBAQCBwcVJlYWREYXRhKFBHY29ubiAq Y29ubikKIAkJcmV0dXJuIC0xOwogCX0KIAorCWF2YWlsYWJsZSA9IHBxUmVhZERhdGFfaW50 ZXJuYWwoY29ubik7CisJaWYgKGF2YWlsYWJsZSA8IDApCisJCXJldHVybiAtMTsKKwllbHNl IGlmIChhdmFpbGFibGUgPiAwKQorCXsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZXJlIGFy ZSBubyBieXRlcyBzdHVjayBpbiBsYXllcnMgYmV0d2VlbiBjb25uLT5pbkJ1ZmZlcgorCQkg KiBhbmQgdGhlIHNvY2tldCwgdG8gbWFrZSBpdCBzYWZlIGZvciBjbGllbnRzIHRvIHBvbGwg b24gUFFzb2NrZXQoKS4KKwkJICovCisJCWlmIChwcURyYWluUGVuZGluZyhjb25uKSkKKwkJ CXJldHVybiAtMTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogSWYgd2UncmUgbm90IHJl dHVybmluZyBhbnkgYnl0ZXMgZnJvbSB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQsCisJCSAq IHRoYXQgbXVzdCBpbXBseSB0aGVyZSBhcmVuJ3QgYW55IGluIHRoZSB0cmFuc3BvcnQgYnVm ZmVyLi4uCisJCSAqLworCQlBc3NlcnQocHFzZWN1cmVfYnl0ZXNfcGVuZGluZyhjb25uKSA9 PSAwKTsKKwl9CisKKwlyZXR1cm4gYXZhaWxhYmxlOworfQorCisvKgorICogV29ya2hvcnNl IGZvciBwcVJlYWREYXRhKCkuICBJdCdzIGtlcHQgc2VwYXJhdGUgZnJvbSB0aGUgcHFEcmFp blBlbmRpbmcoKQorICogbG9naWMgdG8gYXZvaWQgYWRkaW5nIHRvIHRoaXMgZnVuY3Rpb24n cyBnb3RvIGNvbXBsZXhpdHkuCisgKi8KK3N0YXRpYyBpbnQKK3BxUmVhZERhdGFfaW50ZXJu YWwoUEdjb25uICpjb25uKQoreworCWludAkJCXNvbWVyZWFkID0gMDsKKwlpbnQJCQlucmVh ZDsKKwogCS8qIExlZnQtanVzdGlmeSBhbnkgZGF0YSBpbiB0aGUgYnVmZmVyIHRvIG1ha2Ug cm9vbSAqLwogCWlmIChjb25uLT5pblN0YXJ0IDwgY29ubi0+aW5FbmQpCiAJewpAQCAtODAw LDYgKzg0MiwxMDUgQEAgZGVmaW5pdGVseUZhaWxlZDoKIAlyZXR1cm4gLTE7CiB9CiAKKy8q LS0tCisgKiBEcmFpbiBhbnkgdHJhbnNwb3J0IGRhdGEgdGhhdCBpcyBhbHJlYWR5IGJ1ZmZl cmVkIGluIHVzZXJzcGFjZSBhbmQgYWRkIGl0CisgKiB0byBjb25uLT5pbkJ1ZmZlciwgZW5s YXJnaW5nIGluQnVmZmVyIGlmIG5lY2Vzc2FyeS4gIFRoZSBkcmFpbiBmYWlscyBpZgorICog aW5CdWZmZXIgY2Fubm90IGJlIG1hZGUgdG8gaG9sZCBhbGwgYXZhaWxhYmxlIHRyYW5zcG9y dCBkYXRhLgorICoKKyAqIFdlIGFzc3VtZSB0aGF0IHRoZSB1bmRlcmx5aW5nIHNlY3VyZSB0 cmFuc3BvcnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3QKKyAqIGF0dGVtcHQgdG8gcmVhZCBh bnkgbW9yZSBkYXRhIGZyb20gdGhlIHNvY2tldCB3aGlsZSBkcmFpbmluZyB0aGUgdHJhbnNw b3J0CisgKiBidWZmZXIuICBBZnRlciBhIHN1Y2Nlc3NmdWwgcmV0dXJuLCBwcXNlY3VyZV9i eXRlc19wZW5kaW5nKCkgbXVzdCBiZSB6ZXJvLgorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlz IG5lY2Vzc2FyeSB0byBwcmV2ZW50IGRlYWRsb2NrLCBkdWUgdG8gYSBsYXllcmluZworICog dmlvbGF0aW9uIGRlc2lnbmVkIGludG8gb3VyIGFzeW5jaHJvbm91cyBjbGllbnQgQVBJOiBw cVJlYWREYXRhKCkgYW5kIGFsbAorICogdGhlIHBhcnNpbmcgcm91dGluZXMgYWJvdmUgaXQg cmVjZWl2ZSBkYXRhIGZyb20gdGhlIFNTTC9HU1MgdHJhbnNwb3J0CisgKiBidWZmZXIsIGJ1 dCBjbGllbnRzIHBvbGwgb24gdGhlIHJhdyBQUXNvY2tldCgpIGhhbmRsZS4gIFNvIGRhdGEg Y2FuIGJlCisgKiAibG9zdCIgaW4gdGhlIGludGVybWVkaWF0ZSBsYXllciBpZiB3ZSBkb24n dCB0YWtlIGl0IG91dCBoZXJlLgorICoKKyAqIFRvIGlsbHVzdHJhdGUgd2hhdCB3ZSdyZSB0 cnlpbmcgdG8gcHJldmVudCwgc2F5IHRoYXQgdGhlIHNlcnZlciBpcyBzZW5kaW5nCisgKiB0 d28gbWVzc2FnZXMgYXQgb25jZSBpbiByZXNwb25zZSB0byBhIHF1ZXJ5IChBYWFhIGFuZCBC YiksIHRoZSBsaWJwcSBidWZmZXIKKyAqIGlzIGZpdmUgY2hhcmFjdGVycyBpbiBzaXplLCBh bmQgVExTIHJlY29yZHMgbWF4IG91dCBhdCB0aHJlZS1jaGFyYWN0ZXIKKyAqIHBheWxvYWRz LiAgSGVyZSdzIHdoYXQgd291bGQgaGFwcGVuIGlmIHBxUmVhZERhdGEoKSBkaWRuJ3QgY2Fs bAorICogcHFEcmFpblBlbmRpbmcoKToKKyAqCisgKiAgIENsaWVudCAgICBsaWJwcSAgICAg IFNTTCAgICAgIFNvY2tldAorICogICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAg IHwKKyAqICAgICB8ICAgICAgWyAgICAgXSAgICBbICAgXSAgICAgWyAgIF0gICAgWzFdIEJ1 ZmZlcnMgYXJlIGVtcHR5LCBjbGllbnQgaXMKKyAqICAgICB4IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPiB8ICAgICAgICAgIHBvbGxpbmcgb24gc29ja2V0CisgKiAgICAgfCAgICAg ICAgIHwgICAgICAgICB8ICAgICAgICAgfAorICogICAgIHwgICAgICBbICAgICBdICAgIFsg ICBdICAgICBbeHh4XSAgICBbMl0gRmlyc3QgcmVjb3JkIGlzIHJlY2VpdmVkOyBwb2xsCisg KiAgICAgfCA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAgICAgICAgICBzaWduYWxz IHJlYWQtcmVhZHkKKyAqICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8Cisg KiAgICAgeCAtLS0+IFsgICAgIF0gICAgWyAgIF0gICAgIFt4eHhdICAgIFszXSBDbGllbnQg Y2FsbHMgUFFjb25zdW1lSW5wdXQoKQorICogICAgIHwgICAgICAgICB8ICAgICAgICAgfCAg ICAgICAgIHwKKyAqICAgICB8ICAgICAgWyAgICAgXSAtPiBbICAgXSAgICAgW3h4eF0gICAg WzRdIGxpYnBxIGNhbGxzIHBxUmVhZERhdGEoKSB0byBmaWxsCisgKiAgICAgfCAgICAgICAg IHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB0aGUgcmVjZWl2ZSBidWZmZXIKKyAq ICAgICB8ICAgICAgWyAgICAgXSAgICBbQWFhXSA8LS0gWyAgIF0gICAgWzVdIFNTTCBwdWxs cyBwYXlsb2FkIG9mZiB0aGUgd2lyZQorICogICAgIHwgICAgICAgICB8ICAgICAgICAgfCAg ICAgICAgIHwgICAgICAgICAgYW5kIGRlY3J5cHRzIGl0CisgKiAgICAgfCAgICAgIFtBYWEg IF0gPC0gWyAgIF0gICAgIFsgICBdICAgIFs2XSBwcXNlY3VyZV9yZWFkKCkgdGFrZXMgYWxs IGRhdGEKKyAqICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8CisgKiAgICAg fCA8LS0tIFtBYWEgIF0gICAgWyAgIF0gICAgIFsgICBdICAgIFs3XSBQUWNvbnN1bWVJbnB1 dCgpIHJldHVybnMgd2l0aCBhCisgKiAgICAgeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LT4gfCAgICAgICAgICBwYXJ0aWFsIG1lc3NhZ2UsIFBRaXNCdXN5KCkgaXMKKyAqICAgICB8 ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHN0aWxsIHRydWUsIGNs aWVudCBwb2xscyBhZ2FpbgorICogICAgIHwgICAgICBbQWFhICBdICAgIFsgICBdICAgICBb eHh4XSAgICBbOF0gU2Vjb25kIHJlY29yZCBpcyByZWNlaXZlZDsgcG9sbAorICogICAgIHwg PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgICAgICAgICAgc2lnbmFscyByZWFkLXJl YWR5CisgKiAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfAorICogICAgIHgg LS0tPiBbQWFhICBdICAgIFsgICBdICAgICBbeHh4XSAgICBbOV0gQ2xpZW50IGNhbGxzIFBR Y29uc3VtZUlucHV0KCkKKyAqICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8 CisgKiAgICAgfCAgICAgIFtBYWEgIF0gLT4gWyAgIF0gICAgIFt4eHhdICAgWzEwXSBsaWJw cSBjYWxscyBwcVJlYWREYXRhKCkgdG8gZmlsbAorICogICAgIHwgICAgICAgICB8ICAgICAg ICAgfCAgICAgICAgIHwgICAgICAgICAgdGhlIHJlY2VpdmUgYnVmZmVyCisgKiAgICAgfCAg ICAgIFtBYWEgIF0gICAgW2FCYl0gPC0tIFsgICBdICAgWzExXSBTU0wgZGVjcnlwdHMKKyAq ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8CisgKiAgICAgfCAgICAgIFtB YWFhQl0gPC0gW2IgIF0gICAgIFsgICBdICAgWzEyXSBwcXNlY3VyZV9yZWFkKCkgZmlsbHMg aXRzCisgKiAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICBi dWZmZXIsIHRha2luZyBvbmx5IHR3byBieXRlcworICogICAgIHwgPC0tLSBbQWFhYUJdICAg IFtiICBdICAgICBbICAgXSAgIFsxM10gUFFjb25zdW1lSW5wdXQoKSByZXR1cm5zIHdpdGgg YQorICogICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgY29t cGxldGUgbWVzc2FnZSBidWZmZXJlZDsKKyAqICAgICB8ICAgICAgICAgfCAgICAgICAgIHwg ICAgICAgICB8ICAgICAgICAgIFBRaXNCdXN5KCkgaXMgZmFsc2UKKyAqICAgICB4IC0tLT4g W0FhYWFCXSAgICBbYiAgXSAgICAgWyAgIF0gICBbMTRdIENsaWVudCBjYWxscyBQUWdldFJl c3VsdCgpCisgKiAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfAorICogICAg IHwgPC0tLSBbQiAgICBdICAgIFtiICBdICAgICBbICAgXSAgIFsxNV0gQWFhYSBpcyByZXR1 cm5lZDsgUFFpc0J1c3koKSBpcworICogICAgIHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0+IHwgICAgICAgICAgdHJ1ZSBhbmQgY2xpZW50IHBvbGxzIGFnYWluCisgKiAgICAgLiAg ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgLgorICogICAgIC4gICAgICBbQiAgICBdICAg IFtiICBdICAgICAgIC4gICAgIFsxNl0gTm8gcGFja2V0cywgYW5kIGNsaWVudCBoYW5ncy4K KyAqICAgICAuICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAuCisgKgorICogVGhlIHBx RHJhaW5QZW5kaW5nKCkgY2FsbCBmaXhlcyB0aGUgYWJvdmUgc2NlbmFyaW8gYXQgc3RlcCBb MTNdLiAgQmVmb3JlCisgKiByZXR1cm5pbmcgdG8gdGhlIENsaWVudCwgaXQgZmlyc3QgZXhw YW5kcyB0aGUgbGlicHEgYnVmZmVyIGFuZCBtb3ZlcyB0aGUKKyAqIHJlbWFpbmluZyBkYXRh IGZyb20gdGhlIFNTTCBidWZmZXIgdG8gdGhlIGxpYnBxIGJ1ZmZlci4KKyAqCisgKiBUaGUg ZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGVycm9yLiAgU3VjY2Vz cyBtZWFucyB0aGF0CisgKiB0aGVyZSB3YXMgbm8gZGF0YSBwZW5kaW5nIG9yIGl0IHdhcyBz dWNjZXNzZnVsbHkgZHJhaW5lZCB0byBjb25uLT5pbkJ1ZmZlci4KKyAqIE9uIGVycm9yLCBj b25uLT5lcnJvck1lc3NhZ2UgaXMgc2V0LgorICovCitzdGF0aWMgaW50CitwcURyYWluUGVu ZGluZyhQR2Nvbm4gKmNvbm4pCit7CisJc3NpemVfdAkJYnl0ZXNfcGVuZGluZzsKKwlzc2l6 ZV90CQlucmVhZDsKKworCWJ5dGVzX3BlbmRpbmcgPSBwcXNlY3VyZV9ieXRlc19wZW5kaW5n KGNvbm4pOworCWlmIChieXRlc19wZW5kaW5nIDw9IDApCisJCXJldHVybiBieXRlc19wZW5k aW5nOworCisJLyogRXhwYW5kIHRoZSBpbnB1dCBidWZmZXIgaWYgbmVjZXNzYXJ5LiAqLwor CWlmIChwcUNoZWNrSW5CdWZmZXJTcGFjZShjb25uLT5pbkVuZCArIChzaXplX3QpIGJ5dGVz X3BlbmRpbmcsIGNvbm4pKQorCQlyZXR1cm4gLTE7CQkJCS8qIGVycm9yTWVzc2FnZSBhbHJl YWR5IHNldCAqLworCisJbnJlYWQgPSBwcXNlY3VyZV9yZWFkKGNvbm4sIGNvbm4tPmluQnVm ZmVyICsgY29ubi0+aW5FbmQsCisJCQkJCQkgIGJ5dGVzX3BlbmRpbmcpOworCWNvbm4tPmlu RW5kICs9IG5yZWFkOworCisJLyogV2hlbiB0aGVyZSBhcmUgYnl0ZXMgcGVuZGluZywgdGhl IHJlYWQgZnVuY3Rpb24gaXMgbm90IHN1cHBvc2VkIHRvIGZhaWwgKi8KKwlpZiAobnJlYWQg IT0gYnl0ZXNfcGVuZGluZykKKwl7CisJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4s CisJCQkJCQkJCSJkcmFpbmVkIG9ubHkgJXp1IG9mICV6ZCBwZW5kaW5nIGJ5dGVzIGluIHRy YW5zcG9ydCBidWZmZXIiLAorCQkJCQkJCQlucmVhZCwgYnl0ZXNfcGVuZGluZyk7CisJCXJl dHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBwcVNlbmRTb21lOiBzZW5k IGRhdGEgd2FpdGluZyBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4KICAqCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYwppbmRleCAxYjIyYmE3YjdmNi4uZjhiMjE4 NGExY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVu c3NsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYwpA QCAtMjM2LDcgKzIzNiw5IEBAIHBndGxzX2J5dGVzX3BlbmRpbmcoUEdjb25uICpjb25uKQog CWludAkJCXBlbmRpbmc7CiAKIAkvKgotCSAqIE9wZW5TU0wgcmVhZGFoZWFkIGlzIGRvY3Vt ZW50ZWQgdG8gYnJlYWsgU1NMX3BlbmRpbmcoKS4KKwkgKiBPcGVuU1NMIHJlYWRhaGVhZCBp cyBkb2N1bWVudGVkIHRvIGJyZWFrIFNTTF9wZW5kaW5nKCkuICBQbHVzLCB3ZSBjYW4ndAor CSAqIGFmZm9yZCB0byBoYXZlIE9wZW5TU0wgdGFrZSBieXRlcyBvZmYgdGhlIHNvY2tldCB3 aXRob3V0IHByb2Nlc3NpbmcKKwkgKiB0aGVtOyB0aGF0IGJyZWFrcyB0aGUgcG9zdGNvbmRp dGlvbnMgZm9yIHBxc2VjdXJlX2RyYWluX3BlbmRpbmcoKS4KIAkgKi8KIAlBc3NlcnQoIVNT TF9nZXRfcmVhZF9haGVhZChjb25uLT5zc2wpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1 cmUuYwppbmRleCA5MDdjZGI5ZWEzOS4uNzBmYWY4YjJmZTAgMTAwNjQ0Ci0tLSBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLXNlY3VyZS5jCkBAIC0yNDcsNyArMjQ3LDggQEAgcHFzZWN1cmVfcmF3X3JlYWQoUEdj b25uICpjb25uLCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCiAgKglSZXR1cm4gdGhlIG51bWJl ciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIHRyYW5zcG9ydCBidWZmZXIuCiAgKgogICog SWYgcHFzZWN1cmVfcmVhZCgpIGlzIGNhbGxlZCBmb3IgdGhpcyBudW1iZXIgb2YgYnl0ZXMs IGl0J3MgZ3VhcmFudGVlZCB0bwotICogcmV0dXJuIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHJl YWRpbmcgZnJvbSB0aGUgdW5kZXJseWluZyBzb2NrZXQuCisgKiByZXR1cm4gc3VjY2Vzc2Z1 bGx5IHdpdGhvdXQgcmVhZGluZyBmcm9tIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4gIFNlZQor ICogcHFEcmFpblBlbmRpbmcoKSBmb3IgYSBtb3JlIGNvbXBsZXRlIGRpc2N1c3Npb24gb2Yg dGhlIGNvbmNlcHRzIGludm9sdmVkLgogICovCiBzc2l6ZV90CiBwcXNlY3VyZV9ieXRlc19w ZW5kaW5nKFBHY29ubiAqY29ubikKLS0gCjIuNDcuMwoK --------------jjc0of4rFnfkuV01S4NKKg2H--