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 1vVF6j-00H5u2-36 for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Dec 2025 20:23:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vVF6i-002LP9-2h for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Dec 2025 20:23:49 +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.96) (envelope-from ) id 1vVF6i-002LP1-0u for pgsql-hackers@lists.postgresql.org; Mon, 15 Dec 2025 20:23:49 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vVF6g-000qOu-2t for pgsql-hackers@postgresql.org; Mon, 15 Dec 2025 20:23:47 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2a0c09bb78cso12393685ad.0 for ; Mon, 15 Dec 2025 12:23:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1765830226; x=1766435026; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=EWlS/yLKDmgS9SeglUviaN7WiLk2V7/9hDyTIvXeXrY=; b=dq4b32F8nW67cRLoJIG4CwGAQNF865usde032RCzOTmz0EZ/QxvXzvvB7emoEDzbAH 3cl8AcBJUqTnukvvPXNl/g8hBtFJAe0uD2YW4TSfpUkeZxytQb+2XeL09WE6VjwAU9Bf DYAzqryRRXKz4iUDOxcpygbjVPUP1g0Pb6NSsXq024s8zagPu2eGlbZTC+cqWtAyI/0U 0C+Bg2ukl6ai7pPU1cMtus98e3QEQ+von5e1Ov32rmXTJt/Jx5Q5pnHDY1jdYO8PGAcO jx9vHbWCY9vecDVkjWCmVd58N1XOi0ysxqQep8Oop6hYi1xRTlPpISCSuWsrrcqNSS4l TOxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765830226; x=1766435026; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=EWlS/yLKDmgS9SeglUviaN7WiLk2V7/9hDyTIvXeXrY=; b=NXdV7eSuRAEnzGV9bUjRDgiu9XDN56G0zCL+FSTr34DPMdPSTh00I5t8dmGoIK2rvj PegW5YtXkvxAwC2uBUw+Q9USpktG9yAkGkgHGln4bFzgGEf2CFllqWo5wTT8e3tPh2+V l73f8AzkqpxKe9ibItpFlbW3YR6p24QpGKNP+lA1t7AwojeINL42q9sGoQRnDwSr/AYt EOiHbcGGMH1BZVJJfuOxqb/84lBSsVz6MvDTA0716UlJt7xjrucym44QVdQKdF7wzIBH lJKwZ1aQo4lIiog5BTp2dGqK7TJqzQZsuJk5p5KRCO7FiyCVKUo85B9gLrNnnbXHAnZH tbuQ== X-Gm-Message-State: AOJu0Yz+oW9yBnJoEIJ5HsTXmj/RXqlb7n+ow4YUiuk2I592oApL90/Q BUOMNO7y7b7c6LalII8KgUmM76hilckMxH2G0fe1SDmlpCosKI7FA5QqakPXHHb+Zg== X-Gm-Gg: AY/fxX4QVTcPXmA6Pne6HPgEPItVqRWQYdbDLBNR8GEGJ9Cd55xFCmOPxQEp7c807Lh yVMYvkLER40cXbao0WNyAhPPrWXQh8QBJ1s7jpCYNaN2i3YkkZsgKBwhhoTkDjZmVgjBQcrokq3 VAKxuv6ICqJ2g5Q8zatZz97egmEo9axtYcfkjoHc55IFbU3ADpenV0SWHD/ZD0x88Htm7mTVa2G 9i6J34KMcaIUuUA/wSgOwC5FQG/DoDEcN8LxN+tIkmi8ev0pqUBIUfxuKSt8p3Lcz3FMmRYy+AM e+DlG+wEod1drO7tCIkE8HLZg3RXVKl5BYtj1KzSrdDYPrD5afF07258LdkXuxjLLGj3KkYbbl3 qIVgy6L5wndDulXMMPnKl0nt0ieRxijYvcXvX+Xd8+5fIwLQqHAJR47czxI6OOIAJm58IeeXghD wndCZhctIJZtIWFw4mGEJjUnx5syuYPpl2V9+LA3NuncYlXo2eRkJDOg== X-Google-Smtp-Source: AGHT+IFIhRwIYA7ghr4LQDZYTNCvx4GvNS7E5q4fkmhDR9MsE0k3i6EX/BAZZcjh62Erpz1ElXuaBQ== X-Received: by 2002:a17:903:38c5:b0:299:daf0:e044 with SMTP id d9443c01a7336-29f24e6f768mr139173675ad.18.1765830225547; Mon, 15 Dec 2025 12:23:45 -0800 (PST) Received: from jeff-ws-bridge.lan (c-24-7-19-3.hsd1.ca.comcast.net. [24.7.19.3]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a090863c87sm79697855ad.47.2025.12.15.12.23.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Dec 2025 12:23:45 -0800 (PST) Message-ID: Subject: Re: Small patch to improve safety of utf8_to_unicode(). From: Jeff Davis To: Chao Li Cc: pgsql-hackers@postgresql.org Date: Mon, 15 Dec 2025 12:23:44 -0800 In-Reply-To: <541F240E-94AD-4D65-9794-7D6C316BC3FF@gmail.com> References: <541F240E-94AD-4D65-9794-7D6C316BC3FF@gmail.com> Content-Type: multipart/mixed; boundary="=-me8e9qceMmdCMrH86iMr" User-Agent: Evolution 3.52.3-0ubuntu1.1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-me8e9qceMmdCMrH86iMr Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, 2025-12-14 at 07:22 +0800, Chao Li wrote: > This patch adds a length check to utf8_to_unicode(), I think which is > where =E2=80=9Csafety=E2=80=9D comes from. Can you please add an a little= bit more to > the commit message instead of only saying =E2=80=9Cimprove safety=E2=80= =9D. Right: it does not read past pg_mblen(), nor past the supplied length. We could go further and check for valid continuation bytes, but the other routines don't do that. > It also deleted two redundant function declarations from pg_wchar.h, > which may also worth a quick note in the commit message. I committed that as an independent change and removed it from this patch. > + /* Assume byte sequence has not been broken. */ > + c =3D utf8_to_unicode(str, MAX_MULTIBYTE_CHAR_LEN); > ``` >=20 > Here we need an empty line above the new comment. Done, and I expanded the comment to explain why it's safe. > =C2=A0pg_utf_dsplen(const unsigned char *s) > =C2=A0{ > - return ucs_wcwidth(utf8_to_unicode(s)); > + /* trust that input is not a truncated byte sequence */ > + return ucs_wcwidth(utf8_to_unicode(s, > MAX_MULTIBYTE_CHAR_LEN)); > =C2=A0} > ``` >=20 > For the new comment, as a code reader, I wonder why we =E2=80=9Ctrust=E2= =80=9D that? We could use strlen(), but I was concerned that it might be used for string fragments that aren't NUL-terminated, because it's intended for a single character. A caller might reasonably assume that it wouldn't read past pg_mblen(). So I changed the comment slightly to just say that it requires the input is a valid UTF-8 sequence. Let me know if you have another suggestion. Regards, Jeff Davis --=-me8e9qceMmdCMrH86iMr Content-Disposition: attachment; filename="v2-0001-Make-utf8_to_unicode-safer.patch" Content-Type: text/x-patch; name="v2-0001-Make-utf8_to_unicode-safer.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5NGE4MDM4NWVlYzIzZGJiODVjYzYwMTA2M2NhYzA0ZThkODQ1YTUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDQgRGVjIDIwMjUgMTk6Mzc6MzIgLTA4MDAKU3ViamVjdDogW1BBVENIIHYyXSBNYWtlIHV0 ZjhfdG9fdW5pY29kZSgpIHNhZmVyLgoKUmVxdWlyZSB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0aCBz byB0aGF0IGl0IGRvZXNuJ3QgcmVhZCBwYXN0IHRoZSBlbmQKb2YgYSBzdHJpbmcgaWYgZ2l2ZW4g YW4gaW52YWxpZCAob3IgdHJ1bmNhdGVkKSBieXRlIHNlcXVlbmNlLgoKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9jMzU1MzU0ZTZjM2Y0YTdhYWZiMDQ3MzYxYjczZGIyNDcyNjBmY2Ew LmNhbWVsQGotZGF2aXMuY29tCi0tLQogY29udHJpYi9mdXp6eXN0cm1hdGNoL2RhaXRjaF9tb2tv dG9mZi5jICAgfCAgOCArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1 aWx0aW4uYyB8ICA1ICsrKy0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgICAg ICAgICB8IDI2ICsrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvY29tbW9uL3Nhc2xwcmVwLmMg ICAgICAgICAgICAgICAgICAgICB8ICA0ICsrKy0KIHNyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rl c3QuYyAgICAgICAgICAgIHwgIDUgKysrLS0KIHNyYy9jb21tb24vdW5pY29kZV9jYXNlLmMgICAg ICAgICAgICAgICAgIHwgMTIgKysrKysrKy0tLS0KIHNyYy9jb21tb24vd2NoYXIuYyAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDMgKystCiBzcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oICAgICAg ICAgICAgICAgICB8IDEyICsrKysrLS0tLS0tCiA4IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlv bnMoKyksIDMyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZnV6enlzdHJtYXRj aC9kYWl0Y2hfbW9rb3RvZmYuYyBiL2NvbnRyaWIvZnV6enlzdHJtYXRjaC9kYWl0Y2hfbW9rb3Rv ZmYuYwppbmRleCAwN2Y4OTVhZTJiZi4uMTAzYTI5ZDg5ZDQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv ZnV6enlzdHJtYXRjaC9kYWl0Y2hfbW9rb3RvZmYuYworKysgYi9jb250cmliL2Z1enp5c3RybWF0 Y2gvZGFpdGNoX21va290b2ZmLmMKQEAgLTQwMSw3ICs0MDEsMTMgQEAgcmVhZF9jaGFyKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50ICppeCkKIAogCS8qIERlY29kZSBVVEYtOCBjaGFyYWN0 ZXIgdG8gSVNPIDEwNjQ2IGNvZGUgcG9pbnQuICovCiAJc3RyICs9ICppeDsKLQljID0gdXRmOF90 b191bmljb2RlKHN0cik7CisKKwkvKgorCSAqIFdlIGFzc3VtZSB0aGUgc3RyaW5nIGRvZXMgbm90 IGNvbnRhaW4gdHJ1bmNhdGVkIGJ5dGUgc2VxdWVuY2VzIGJlY2F1c2UKKwkgKiBpdCBjYW1lIGZy b20gcGdfc2VydmVyX3RvX2FueSguLi4sIFBHX1VURjgpLCBzbyB3ZSBjYW4gc2FmZWx5IHVzZQor CSAqIE1BWF9NVUxUSUJZVEVfQ0hBUl9MRU4uCisJICovCisJYyA9IHV0ZjhfdG9fdW5pY29kZShz dHIsIE1BWF9NVUxUSUJZVEVfQ0hBUl9MRU4pOwogCiAJLyogQWR2YW5jZSAqaXgsIGJ1dCAoZm9y IHNhZmV0eSkgbm90IGlmIHdlJ3ZlIHJlYWNoZWQgZW5kIG9mIHN0cmluZy4gKi8KIAlpZiAoYykK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKaW5kZXggMGMyOTIwMTEy YmIuLjI4ZmM1NTI3OGIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9j YWxlX2J1aWx0aW4uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0 aW4uYwpAQCAtNTksMTIgKzU5LDEzIEBAIHN0YXRpYyBzaXplX3QKIGluaXRjYXBfd2JuZXh0KHZv aWQgKnN0YXRlKQogewogCXN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZSAqd2JzdGF0ZSA9IChzdHJ1 Y3QgV29yZEJvdW5kYXJ5U3RhdGUgKikgc3RhdGU7CisJdW5zaWduZWQgY2hhciAqc3RyID0gKHVu c2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyOwogCiAJd2hpbGUgKHdic3RhdGUtPm9mZnNldCA8 IHdic3RhdGUtPmxlbiAmJgogCQkgICB3YnN0YXRlLT5zdHJbd2JzdGF0ZS0+b2Zmc2V0XSAhPSAn XDAnKQogCXsKLQkJY2hhcjMyX3QJdSA9IHV0ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAq KSB3YnN0YXRlLT5zdHIgKwotCQkJCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7CisJCWNoYXIzMl90 CXUgPSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgd2JzdGF0ZS0+b2Zmc2V0LAorCQkJCQkJCQkJCXdi c3RhdGUtPmxlbiAtIHdic3RhdGUtPm9mZnNldCk7CiAJCWJvb2wJCWN1cnJfYWxudW0gPSBwZ191 X2lzYWxudW0odSwgd2JzdGF0ZS0+cG9zaXgpOwogCiAJCWlmICghd2JzdGF0ZS0+aW5pdCB8fCBj dXJyX2FsbnVtICE9IHdic3RhdGUtPnByZXZfYWxudW0pCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpp bmRleCBiYWE1YjQ0ZWE4ZC4uZDY4NDM3MDkwMGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC92YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpA QCAtNTQyMywxOSArNTQyMywxNyBAQCBEYXR1bQogdW5pY29kZV9hc3NpZ25lZChQR19GVU5DVElP Tl9BUkdTKQogewogCXRleHQJICAgKmlucHV0ID0gUEdfR0VUQVJHX1RFWFRfUFAoMCk7Ci0JdW5z aWduZWQgY2hhciAqcDsKLQlpbnQJCQlzaXplOworCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWdu ZWQgY2hhciAqKSBWQVJEQVRBX0FOWShpbnB1dCk7CisJdW5zaWduZWQgY2hhciAqcF9lbmQgPSBw ICsgVkFSU0laRV9BTllfRVhIRFIoaW5wdXQpOwogCiAJaWYgKEdldERhdGFiYXNlRW5jb2Rpbmco KSAhPSBQR19VVEY4KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coIlVuaWNvZGUgY2F0 ZWdvcml6YXRpb24gY2FuIG9ubHkgYmUgcGVyZm9ybWVkIGlmIHNlcnZlciBlbmNvZGluZyBpcyBV VEY4IikpKTsKIAogCS8qIGNvbnZlcnQgdG8gY2hhcjMyX3QgKi8KLQlzaXplID0gcGdfbWJzdHJs ZW5fd2l0aF9sZW4oVkFSREFUQV9BTlkoaW5wdXQpLCBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkp OwotCXAgPSAodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FOWShpbnB1dCk7Ci0JZm9yIChpbnQg aSA9IDA7IGkgPCBzaXplOyBpKyspCisJd2hpbGUgKHAgPCBwX2VuZCkKIAl7Ci0JCWNoYXIzMl90 CXVjaGFyID0gdXRmOF90b191bmljb2RlKHApOworCQljaGFyMzJfdAl1Y2hhciA9IHV0ZjhfdG9f dW5pY29kZShwLCBwX2VuZCAtIHApOwogCQlpbnQJCQljYXRlZ29yeSA9IHVuaWNvZGVfY2F0ZWdv cnkodWNoYXIpOwogCiAJCWlmIChjYXRlZ29yeSA9PSBQR19VX1VOQVNTSUdORUQpCkBAIC01NDU2 LDcgKzU0NTQsOCBAQCB1bmljb2RlX25vcm1hbGl6ZV9mdW5jKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ aW50CQkJc2l6ZTsKIAljaGFyMzJfdCAgICppbnB1dF9jaGFyczsKIAljaGFyMzJfdCAgICpvdXRw dXRfY2hhcnM7Ci0JdW5zaWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2ln bmVkIGNoYXIgKikgVkFSREFUQV9BTlkoaW5wdXQpOworCXVuc2lnbmVkIGNoYXIgKnBfZW5kID0g cCArIFZBUlNJWkVfQU5ZX0VYSERSKGlucHV0KTsKIAl0ZXh0CSAgICpyZXN1bHQ7CiAJaW50CQkJ aTsKIApAQCAtNTQ2NSwxNCArNTQ2NCwxMyBAQCB1bmljb2RlX25vcm1hbGl6ZV9mdW5jKFBHX0ZV TkNUSU9OX0FSR1MpCiAJLyogY29udmVydCB0byBjaGFyMzJfdCAqLwogCXNpemUgPSBwZ19tYnN0 cmxlbl93aXRoX2xlbihWQVJEQVRBX0FOWShpbnB1dCksIFZBUlNJWkVfQU5ZX0VYSERSKGlucHV0 KSk7CiAJaW5wdXRfY2hhcnMgPSBwYWxsb2MoKHNpemUgKyAxKSAqIHNpemVvZihjaGFyMzJfdCkp OwotCXAgPSAodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FOWShpbnB1dCk7CiAJZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykKIAl7Ci0JCWlucHV0X2NoYXJzW2ldID0gdXRmOF90b191bmljb2Rl KHApOworCQlpbnB1dF9jaGFyc1tpXSA9IHV0ZjhfdG9fdW5pY29kZShwLCBwX2VuZCAtIHApOwog CQlwICs9IHBnX3V0Zl9tYmxlbihwKTsKIAl9CiAJaW5wdXRfY2hhcnNbaV0gPSAoY2hhcjMyX3Qp ICdcMCc7Ci0JQXNzZXJ0KChjaGFyICopIHAgPT0gVkFSREFUQV9BTlkoaW5wdXQpICsgVkFSU0la RV9BTllfRVhIRFIoaW5wdXQpKTsKKwlBc3NlcnQocCA9PSBwX2VuZCk7CiAKIAkvKiBhY3Rpb24g Ki8KIAlvdXRwdXRfY2hhcnMgPSB1bmljb2RlX25vcm1hbGl6ZShmb3JtLCBpbnB1dF9jaGFycyk7 CkBAIC01NTIyLDcgKzU1MjAsOCBAQCB1bmljb2RlX2lzX25vcm1hbGl6ZWQoUEdfRlVOQ1RJT05f QVJHUykKIAlpbnQJCQlzaXplOwogCWNoYXIzMl90ICAgKmlucHV0X2NoYXJzOwogCWNoYXIzMl90 ICAgKm91dHB1dF9jaGFyczsKLQl1bnNpZ25lZCBjaGFyICpwOworCXVuc2lnbmVkIGNoYXIgKnAg PSAodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FOWShpbnB1dCk7CisJdW5zaWduZWQgY2hhciAq cF9lbmQgPSBwICsgVkFSU0laRV9BTllfRVhIRFIoaW5wdXQpOwogCWludAkJCWk7CiAJVW5pY29k ZU5vcm1hbGl6YXRpb25RQyBxdWlja2NoZWNrOwogCWludAkJCW91dHB1dF9zaXplOwpAQCAtNTUz MywxNCArNTUzMiwxMyBAQCB1bmljb2RlX2lzX25vcm1hbGl6ZWQoUEdfRlVOQ1RJT05fQVJHUykK IAkvKiBjb252ZXJ0IHRvIGNoYXIzMl90ICovCiAJc2l6ZSA9IHBnX21ic3RybGVuX3dpdGhfbGVu KFZBUkRBVEFfQU5ZKGlucHV0KSwgVkFSU0laRV9BTllfRVhIRFIoaW5wdXQpKTsKIAlpbnB1dF9j aGFycyA9IHBhbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90KSk7Ci0JcCA9ICh1bnNp Z25lZCBjaGFyICopIFZBUkRBVEFfQU5ZKGlucHV0KTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsg aSsrKQogCXsKLQkJaW5wdXRfY2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7CisJCWlucHV0 X2NoYXJzW2ldID0gdXRmOF90b191bmljb2RlKHAsIHBfZW5kIC0gcCk7CiAJCXAgKz0gcGdfdXRm X21ibGVuKHApOwogCX0KIAlpbnB1dF9jaGFyc1tpXSA9IChjaGFyMzJfdCkgJ1wwJzsKLQlBc3Nl cnQoKGNoYXIgKikgcCA9PSBWQVJEQVRBX0FOWShpbnB1dCkgKyBWQVJTSVpFX0FOWV9FWEhEUihp bnB1dCkpOworCUFzc2VydChwID09IHBfZW5kKTsKIAogCS8qIHF1aWNrIGNoZWNrIChzZWUgVUFY ICMxNSkgKi8KIAlxdWlja2NoZWNrID0gdW5pY29kZV9pc19ub3JtYWxpemVkX3F1aWNrY2hlY2so Zm9ybSwgaW5wdXRfY2hhcnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9zYXNscHJlcC5jIGIv c3JjL2NvbW1vbi9zYXNscHJlcC5jCmluZGV4IDEwMWU4ZDY1YTRkLi4wODM3MDI2NTRiMCAxMDA2 NDQKLS0tIGEvc3JjL2NvbW1vbi9zYXNscHJlcC5jCisrKyBiL3NyYy9jb21tb24vc2FzbHByZXAu YwpAQCAtMTA1NSw2ICsxMDU1LDcgQEAgcGdfc2FzbHByZXAoY29uc3QgY2hhciAqaW5wdXQsIGNo YXIgKipvdXRwdXQpCiAJaW50CQkJaTsKIAlib29sCQljb250YWluc19SYW5kQUxDYXQ7CiAJdW5z aWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBjaGFyICpwX2VuZDsKIAljaGFyMzJfdCAgICp3cDsK IAogCS8qIEVuc3VyZSB3ZSByZXR1cm4gKm91dHB1dCBhcyBOVUxMIG9uIGZhaWx1cmUgKi8KQEAg LTEwODgsOSArMTA4OSwxMCBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1dCwgY2hhciAq Km91dHB1dCkKIAkJZ290byBvb207CiAKIAlwID0gKHVuc2lnbmVkIGNoYXIgKikgaW5wdXQ7CisJ cF9lbmQgPSBwICsgc3RybGVuKGlucHV0KTsKIAlmb3IgKGkgPSAwOyBpIDwgaW5wdXRfc2l6ZTsg aSsrKQogCXsKLQkJaW5wdXRfY2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7CisJCWlucHV0 X2NoYXJzW2ldID0gdXRmOF90b191bmljb2RlKHAsIHBfZW5kIC0gcCk7CiAJCXAgKz0gcGdfdXRm X21ibGVuKHApOwogCX0KIAlpbnB1dF9jaGFyc1tpXSA9IChjaGFyMzJfdCkgJ1wwJzsKZGlmZiAt LWdpdCBhL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYyBiL3NyYy9jb21tb24vdW5pY29k ZS9jYXNlX3Rlc3QuYwppbmRleCAwMGQ0Zjg1ZTVhNS4uZTYzY2UyZmJlYjkgMTAwNjQ0Ci0tLSBh L3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGUv Y2FzZV90ZXN0LmMKQEAgLTUxLDEyICs1MSwxMyBAQCBzdGF0aWMgc2l6ZV90CiBpbml0Y2FwX3di bmV4dCh2b2lkICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgKndic3RhdGUg PSAoc3RydWN0IFdvcmRCb3VuZGFyeVN0YXRlICopIHN0YXRlOworCXVuc2lnbmVkIGNoYXIgKnN0 ciA9ICh1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0cjsKIAogCXdoaWxlICh3YnN0YXRlLT5v ZmZzZXQgPCB3YnN0YXRlLT5sZW4gJiYKIAkJICAgd2JzdGF0ZS0+c3RyW3dic3RhdGUtPm9mZnNl dF0gIT0gJ1wwJykKIAl7Ci0JCWNoYXIzMl90CXUgPSB1dGY4X3RvX3VuaWNvZGUoKHVuc2lnbmVk IGNoYXIgKikgd2JzdGF0ZS0+c3RyICsKLQkJCQkJCQkJCQl3YnN0YXRlLT5vZmZzZXQpOworCQlj aGFyMzJfdAl1ID0gdXRmOF90b191bmljb2RlKHN0ciArIHdic3RhdGUtPm9mZnNldCwKKwkJCQkJ CQkJCQl3YnN0YXRlLT5sZW4gLSB3YnN0YXRlLT5vZmZzZXQpOwogCQlib29sCQljdXJyX2FsbnVt ID0gcGdfdV9pc2FsbnVtKHUsIHdic3RhdGUtPnBvc2l4KTsKIAogCQlpZiAoIXdic3RhdGUtPmlu aXQgfHwgY3Vycl9hbG51bSAhPSB3YnN0YXRlLT5wcmV2X2FsbnVtKQpkaWZmIC0tZ2l0IGEvc3Jj L2NvbW1vbi91bmljb2RlX2Nhc2UuYyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKaW5kZXgg ZTVlNDk0ZGI0M2MuLmE3NjAwOTQxMDRjIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGVf Y2FzZS5jCisrKyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKQEAgLTIyMywxNSArMjIzLDE5 IEBAIGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpz cmMsIHNzaXplX3Qgc3JjbGVuLAogCUFzc2VydCgoc3RyX2Nhc2VraW5kID09IENhc2VUaXRsZSAm JiB3Ym5leHQgJiYgd2JzdGF0ZSkgfHwKIAkJICAgKHN0cl9jYXNla2luZCAhPSBDYXNlVGl0bGUg JiYgIXdibmV4dCAmJiAhd2JzdGF0ZSkpOwogCisJaWYgKHNyY2xlbiA8IDApCisJCXNyY2xlbiA9 IHN0cmxlbihzcmMpOworCiAJaWYgKHN0cl9jYXNla2luZCA9PSBDYXNlVGl0bGUpCiAJewogCQli b3VuZGFyeSA9IHdibmV4dCh3YnN0YXRlKTsKIAkJQXNzZXJ0KGJvdW5kYXJ5ID09IDApOwkvKiBz dGFydCBvZiB0ZXh0IGlzIGFsd2F5cyBhIGJvdW5kYXJ5ICovCiAJfQogCi0Jd2hpbGUgKChzcmNs ZW4gPCAwIHx8IHNyY29mZiA8IHNyY2xlbikgJiYgc3JjW3NyY29mZl0gIT0gJ1wwJykKKwl3aGls ZSAoc3Jjb2ZmIDwgc3JjbGVuKQogCXsKLQkJY2hhcjMyX3QJdTEgPSB1dGY4X3RvX3VuaWNvZGUo KHVuc2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmKTsKKwkJY2hhcjMyX3QJdTEgPSB1dGY4X3Rv X3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmLAorCQkJCQkJCQkJCSBzcmNs ZW4gLSBzcmNvZmYpOwogCQlpbnQJCQl1MWxlbiA9IHVuaWNvZGVfdXRmOGxlbih1MSk7CiAJCWNo YXIzMl90CXNpbXBsZSA9IDA7CiAJCWNvbnN0IGNoYXIzMl90ICpzcGVjaWFsID0gTlVMTDsKQEAg LTMyMCw3ICszMjQsNyBAQCBjaGVja19maW5hbF9zaWdtYShjb25zdCB1bnNpZ25lZCBjaGFyICpz dHIsIHNpemVfdCBsZW4sIHNpemVfdCBvZmZzZXQpCiAJewogCQlpZiAoKHN0cltpXSAmIDB4ODAp ID09IDAgfHwgKHN0cltpXSAmIDB4QzApID09IDB4QzApCiAJCXsKLQkJCWNoYXIzMl90CWN1cnIg PSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgaSk7CisJCQljaGFyMzJfdAljdXJyID0gdXRmOF90b191 bmljb2RlKHN0ciArIGksIGxlbiAtIGkpOwogCiAJCQlpZiAocGdfdV9wcm9wX2Nhc2VfaWdub3Jh YmxlKGN1cnIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzQ0LDcgKzM0OCw3IEBAIGNoZWNrX2ZpbmFs X3NpZ21hKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNl dCkKIAl7CiAJCWlmICgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAoc3RyW2ldICYgMHhDMCkgPT0g MHhDMCkKIAkJewotCQkJY2hhcjMyX3QJY3VyciA9IHV0ZjhfdG9fdW5pY29kZShzdHIgKyBpKTsK KwkJCWNoYXIzMl90CWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgaSwgbGVuIC0gaSk7CiAK IAkJCWlmIChwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUoY3VycikpCiAJCQkJY29udGludWU7CmRp ZmYgLS1naXQgYS9zcmMvY29tbW9uL3djaGFyLmMgYi9zcmMvY29tbW9uL3djaGFyLmMKaW5kZXgg YTRiYzI5OTIxZGUuLmExMDQyMzRhZTkyIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3djaGFyLmMK KysrIGIvc3JjL2NvbW1vbi93Y2hhci5jCkBAIC02NjEsNyArNjYxLDggQEAgdWNzX3djd2lkdGgo cGdfd2NoYXIgdWNzKQogc3RhdGljIGludAogcGdfdXRmX2RzcGxlbihjb25zdCB1bnNpZ25lZCBj aGFyICpzKQogewotCXJldHVybiB1Y3Nfd2N3aWR0aCh1dGY4X3RvX3VuaWNvZGUocykpOworCS8q IGlucHV0IG11c3QgYmUgYSB2YWxpZCBVVEYtOCBzZXF1ZW5jZSAqLworCXJldHVybiB1Y3Nfd2N3 aWR0aCh1dGY4X3RvX3VuaWNvZGUocywgTUFYX01VTFRJQllURV9DSEFSX0xFTikpOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaCBiL3NyYy9pbmNsdWRlL21i L3BnX3djaGFyLmgKaW5kZXggNWRmNjdjZWVhODcuLjZkYzBmZmYzMzJmIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oCisrKyBiL3NyYy9pbmNsdWRlL21iL3BnX3djaGFyLmgK QEAgLTU1OCwyMiArNTU4LDIwIEBAIHN1cnJvZ2F0ZV9wYWlyX3RvX2NvZGVwb2ludChjaGFyMTZf dCBmaXJzdCwgY2hhcjE2X3Qgc2Vjb25kKQogLyoKICAqIENvbnZlcnQgYSBVVEYtOCBjaGFyYWN0 ZXIgdG8gYSBVbmljb2RlIGNvZGUgcG9pbnQuCiAgKiBUaGlzIGlzIGEgb25lLWNoYXJhY3RlciB2 ZXJzaW9uIG9mIHBnX3V0ZjJ3Y2hhcl93aXRoX2xlbi4KLSAqCi0gKiBObyBlcnJvciBjaGVja3Mg aGVyZSwgYyBtdXN0IHBvaW50IHRvIGEgbG9uZy1lbm91Z2ggc3RyaW5nLgogICovCiBzdGF0aWMg aW5saW5lIGNoYXIzMl90Ci11dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqYykK K3V0ZjhfdG9fdW5pY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpjLCBzaXplX3QgbGVuKQogewot CWlmICgoKmMgJiAweDgwKSA9PSAwKQorCWlmICgoKmMgJiAweDgwKSA9PSAwICYmIGxlbiA+PSAx KQogCQlyZXR1cm4gKGNoYXIzMl90KSBjWzBdOwotCWVsc2UgaWYgKCgqYyAmIDB4ZTApID09IDB4 YzApCisJZWxzZSBpZiAoKCpjICYgMHhlMCkgPT0gMHhjMCAmJiBsZW4gPj0gMikKIAkJcmV0dXJu IChjaGFyMzJfdCkgKCgoY1swXSAmIDB4MWYpIDw8IDYpIHwKIAkJCQkJCSAgIChjWzFdICYgMHgz ZikpOwotCWVsc2UgaWYgKCgqYyAmIDB4ZjApID09IDB4ZTApCisJZWxzZSBpZiAoKCpjICYgMHhm MCkgPT0gMHhlMCAmJiBsZW4gPj0gMykKIAkJcmV0dXJuIChjaGFyMzJfdCkgKCgoY1swXSAmIDB4 MGYpIDw8IDEyKSB8CiAJCQkJCQkgICAoKGNbMV0gJiAweDNmKSA8PCA2KSB8CiAJCQkJCQkgICAo Y1syXSAmIDB4M2YpKTsKLQllbHNlIGlmICgoKmMgJiAweGY4KSA9PSAweGYwKQorCWVsc2UgaWYg KCgqYyAmIDB4ZjgpID09IDB4ZjAgJiYgbGVuID49IDQpCiAJCXJldHVybiAoY2hhcjMyX3QpICgo KGNbMF0gJiAweDA3KSA8PCAxOCkgfAogCQkJCQkJICAgKChjWzFdICYgMHgzZikgPDwgMTIpIHwK IAkJCQkJCSAgICgoY1syXSAmIDB4M2YpIDw8IDYpIHwKLS0gCjIuNDMuMAoK --=-me8e9qceMmdCMrH86iMr--