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 1whGb3-0007LX-0X for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 00:57:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whGb1-0040cs-1s for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 00:57:04 +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 1whGb1-0040ck-0j for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 00:57:04 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whGay-000000008j4-2L5g for pgsql-hackers@postgresql.org; Wed, 08 Jul 2026 00:57:03 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2caea3f742bso2856295ad.0 for ; Tue, 07 Jul 2026 17:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20251104.gappssmtp.com; s=20251104; t=1783472219; x=1784077019; darn=postgresql.org; h=mime-version:user-agent:content-type:references:in-reply-to:date:cc :to:from:subject:message-id:from:to:cc:subject:date:message-id :reply-to:content-type; bh=/h9S0mY81OTcm34hQ+9MsQFCAddM6ulaph8g2H6fnFM=; b=pDZB53qvMCYojQDUg+kOBmVFfdolsXuGrtM/MyDaRXM7OvdOkO5FbXZ87X2pGoe3Cq eyewhxQ3fp3Kkjh7xw/e7agfKvsI4I4DMMZmnmws4oLt59YVtfRy2njCjDbomk+7+QXP NXslMlQFP/MVsa+34lARqfUpRBh+CD2HsOavXMnYDxl/NcLXDYb4aJIDM8EDBvnhkop/ tza0orhDwFjshm6kQeE9HHi/zKb9sCU2OVZc//h4RuzX3vU0iW/4eZTq1HB8i88sPLlK lpa9e+GNikYJIDR0lVTBubP6lIKQCRAEPEFKlxMucQtrUAm5lTUaHpYrfyM1SqiFudF8 K3ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783472219; x=1784077019; h=mime-version:user-agent:content-type: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:content-type; bh=/h9S0mY81OTcm34hQ+9MsQFCAddM6ulaph8g2H6fnFM=; b=bm/DikNK+Nl/lDYaxcHJ1iOojV2/a9AhowTWm2tGHrOyDGYQ9SMfkALztGJXCSPDl1 0myBqI4NBdSGhrih3Jdf+RpLpoTSopKaagEIxR+cQbzJ0dKOjo3rDkwTk/Bkty31EquU 0c+CzyLWYT4XkvBO9FcQ71+JPEclQ4EctZOFx3+ALF6rtehZy+ZaLtHLKrfZMYBvrZRd 99FLCJHYxEmCbXwKsRwTN+xpgUea6SdfyHZA2hdUH9We6EneN2hBvkYSEshz7xbsUBqz 2JEqIcZKTwjtNlDSzRZLyDgpwB4Vm0qllceBUOOlMzxd8Edpmh+xUWOHvBR6tPajpQiG t6iw== X-Gm-Message-State: AOJu0YwFwFdgZ0vjoQVGzcYCKfaQ1VG6r7DWJNkRw5IZ+fXD+FL7Rvvd Pk2gYYEDWlFfrrBjLV9OGdZMUi18yeRpPJcz6WjGYEEvKOSJWo1muBaixreVgoQwfA== X-Gm-Gg: AfdE7cljPrUUz0kVI+EWMNol9R+Rk0uDhy02b8s12oHw+74RkdY9zC1XgtCHmHq0UDO Ay4Sh63UoFZLJrZZIymGEK00ohxHyhdMXJpxRyJY0o+i6N8+kBZzeFLnRaoNwlAXswSRsxZn8YU D+ZmsouxwAW+wJtR/9d2HahqJyp9PjCrjKZyjic27bc2bYrqtzPBPUpXhMhWhfO7YbDIECu0bvA bT7YAGrVTcfXhBtbHEz7Ne4r/2yafPB+whLHXyr+H9QwsA23ajwJDpgrlhrwjGEjXJ8GSCZtZqo lzWhM/a3l8nt00/OT41Efp/jK4sKmOIqcxr7BM+AcNgMRJMTOYI5Q+My+O6n6BjfSViTWqKbYhO 1ct6JSsplxo242TrCQaCh8Q+bYADaPjXBU83f+YBX7vqvmQUnw+AF6vYnxFSlmVJEvpsfp52Asz kdMgSKU9ysnnNgDAu12+9ShbqUrzFiT5hNXe3ZFe5dgeid0Q== X-Received: by 2002:a05:6a20:4304:b0:3b4:b2d7:c146 with SMTP id adf61e73a8af0-3c0bcc5af6amr64858637.21.1783472219142; Tue, 07 Jul 2026 17:56:59 -0700 (PDT) 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 a92af1059eb24-13b659d8da9sm20953466c88.14.2026.07.07.17.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 17:56:58 -0700 (PDT) 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: Tue, 07 Jul 2026 17:56:57 -0700 In-Reply-To: <16CAD4DB-9D4A-481A-BB4E-78775C4F4B2C@gmail.com> References: <541F240E-94AD-4D65-9794-7D6C316BC3FF@gmail.com> <313BCA0E-2E74-4EB6-9AA8-10DB7F439151@gmail.com> <592441c1d871a4ed0ac1708e132f447caa35869c.camel@j-davis.com> <3058CAA1-40E0-4098-893B-615F77CD35E1@gmail.com> <0cedb517aee8b79b8e31a4e42885ed88c2a67c5f.camel@j-davis.com> <16CAD4DB-9D4A-481A-BB4E-78775C4F4B2C@gmail.com> Content-Type: multipart/mixed; boundary="=-kUBTNItnaiGtEqo7SZSW" 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 --=-kUBTNItnaiGtEqo7SZSW Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2026-06-26 at 12:38 +0800, Chao Li wrote: > Sounds like 0001 will be back patched. In that case, the commit > message "defend against invalid UTF8=E2=80=9D seems too broad. Does it ma= ke > sense to add some brief description about the defend behavior to the > function header comment and the commit message? Committed 0001 and backported to 17. I think adding too much explanation about behavior we don't expect to actually see would just add confusion. > Then I continue to review 0002-0005: >=20 > 0002 - overall looks good. A small comment is: > ``` > + for (int i =3D offset; i > 0;) >=20 > + for (int i =3D offset + ulen; i < len;) > ``` Committed 0002 and backported to 18. The 'int' is pre-existing, so I left it as-is. > 0003 - looks good. Committed to master only. > 0004 - looks good. This commit introduces a new helper utf8decode() > that will resolve my previous concern on 0001. >=20 > 0005 - Mostly looks good. This commit applies the new help and my > previous concern is resolved. But from what you talked, I guess 0004 > and 0005 will only be pushed to HEAD. >=20 > Just one tiny comment on 0005: > ``` > + /* invalid UTF8: surrogates */ > + needed =3D unicode_strfold(NULL, 0, "abc\xED\xA0\x81xyz", 7, > &consumed, false); > + Assert(needed =3D=3D 3 && consumed =3D=3D 3); > ``` >=20 > This test passes a 10-char string but uses 7 as srclen. I know that > doesn=E2=80=99t affect the test result, but it just adds unnecessary > confusion to readers. So maybe change 7 to 10 to reflect to the real > string length. Thank you, attached with fix. I'd like to wait for more comments before I commit these last two patches, to see if the functions are generally useful for other callers as well. Regards, Jeff Davis --=-kUBTNItnaiGtEqo7SZSW Content-Disposition: attachment; filename*0=v6-0001-Validating-iterator-friendly-UTF8-encoder-decoder.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="v6-0001-Validating-iterator-friendly-UTF8-encoder-decoder.patch"; charset="UTF-8" RnJvbSA1YWIxNzQ5NjNlMmFiMDQ0NTVlNTllYTViMDc3MjM4Njg3MTUxNDQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDQgSnVuIDIwMjYgMTI6MDg6NTEgLTA3MDAKU3ViamVjdDogW1BBVENIIHY2IDEvMl0gVmFs aWRhdGluZywgaXRlcmF0b3ItZnJpZW5kbHkgVVRGOCBlbmNvZGVyL2RlY29kZXIKIEFQSS4KCkRp c2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYzM1NTM1NGU2YzNmNGE3YWFmYjA0NzM2MWI3 M2RiMjQ3MjYwZmNhMC5jYW1lbEBqLWRhdmlzLmNvbQotLS0KIHNyYy9pbmNsdWRlL21iL3BnX3dj aGFyLmggfCAxMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmls ZSBjaGFuZ2VkLCAxMzcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApp bmRleCBkZWVlMmE4MzJjMy4uN2FmYmYyNWZjMTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21i L3BnX3djaGFyLmgKKysrIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApAQCAtMjcsNiArMjcs MTEgQEAKICAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgcGdfd2NoYXI7CiAKKy8qCisgKiBSZXR1 cm5lZCBmb3IgZGVjb2RpbmcgZmFpbHVyZXMgaW4gdXRmOGRlY29kZSgpIGFuZCB1dGY4X3RvX3Vu aWNvZGUoKS4KKyAqLworI2RlZmluZSBQR19JTlZBTElEX0NPREVQT0lOVAkweEZGRkZGRkZGCisK IC8qCiAgKiBNYXhpbXVtIGJ5dGUgbGVuZ3RoIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGFu eSBiYWNrZW5kIGVuY29kaW5nCiAgKi8KQEAgLTM5MiwxMSArMzk3LDE0MCBAQCBzdXJyb2dhdGVf cGFpcl90b19jb2RlcG9pbnQoY2hhcjE2X3QgZmlyc3QsIGNoYXIxNl90IHNlY29uZCkKIAlyZXR1 cm4gKChmaXJzdCAmIDB4M0ZGKSA8PCAxMCkgKyAweDEwMDAwICsgKHNlY29uZCAmIDB4M0ZGKTsK IH0KIAorLyoKKyAqIEVuY29kZSB0aGUgY29kZXBvaW50IGFzIFVURjggYW5kIHJldHVybiB0aGUg bnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkLiBJZgorICogdGhlIG51bWJlciBvZiBieXRlcyByZXF1 aXJlZCBleGNlZWRzIGRzdHNpemUsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVz IHJlcXVpcmVkIHdpdGhvdXQgbW9kaWZ5aW5nIGRzdC4gSWYgZHN0c2l6ZSBpcyB6ZXJvLCBkc3Qg bWF5IGJlCisgKiBOVUxMLiBJZiBjb2RlcG9pbnQgaXMgbm90IGEgdmFsaWQgVW5pY29kZSBTY2Fs YXIsIHJldHVybiAtMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3V0ZjhlbmNvZGUodW5zaWdu ZWQgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY2hhcjMyX3QgY29kZXBvaW50KQoreworCWlu dAkJCW5ieXRlczsKKworCWlmIChjb2RlcG9pbnQgPD0gMHg3RikKKwkJbmJ5dGVzID0gMTsKKwll bHNlIGlmIChjb2RlcG9pbnQgPD0gMHg3RkYpCisJCW5ieXRlcyA9IDI7CisJZWxzZSBpZiAoY29k ZXBvaW50IDw9IDB4RkZGRikKKwl7CisJCS8qIHN1cnJvZ2F0ZSBoYWx2ZXMgbm90IHZhbGlkIGZv ciBVVEY4ICovCisJCWlmIChjb2RlcG9pbnQgPj0gMHhEODAwICYmIGNvZGVwb2ludCA8PSAweERG RkYpCisJCQlyZXR1cm4gLTE7CisJCW5ieXRlcyA9IDM7CisJfQorCWVsc2UgaWYgKGNvZGVwb2lu dCA8PSAweDEwRkZGRikKKwkJbmJ5dGVzID0gNDsKKwllbHNlCisJCXJldHVybiAtMTsKKworCWlm ICgoc2l6ZV90KSBuYnl0ZXMgPiBkc3RzaXplKQorCQlyZXR1cm4gbmJ5dGVzOworCisJaWYgKGNv ZGVwb2ludCA8PSAweDdGKQorCXsKKwkJZHN0WzBdID0gY29kZXBvaW50OworCX0KKwllbHNlIGlm IChjb2RlcG9pbnQgPD0gMHg3RkYpCisJeworCQlkc3RbMF0gPSAweEMwIHwgKChjb2RlcG9pbnQg Pj4gNikgJiAweDFGKTsKKwkJZHN0WzFdID0gMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKTsKKwl9 CisJZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4RkZGRikKKwl7CisJCWRzdFswXSA9IDB4RTAgfCAo KGNvZGVwb2ludCA+PiAxMikgJiAweDBGKTsKKwkJZHN0WzFdID0gMHg4MCB8ICgoY29kZXBvaW50 ID4+IDYpICYgMHgzRik7CisJCWRzdFsyXSA9IDB4ODAgfCAoY29kZXBvaW50ICYgMHgzRik7CisJ fQorCWVsc2UgaWYgKGNvZGVwb2ludCA8PSAweDEwRkZGRikKKwl7CisJCWRzdFswXSA9IDB4RjAg fCAoKGNvZGVwb2ludCA+PiAxOCkgJiAweDA3KTsKKwkJZHN0WzFdID0gMHg4MCB8ICgoY29kZXBv aW50ID4+IDEyKSAmIDB4M0YpOworCQlkc3RbMl0gPSAweDgwIHwgKChjb2RlcG9pbnQgPj4gNikg JiAweDNGKTsKKwkJZHN0WzNdID0gMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKTsKKwl9CisKKwly ZXR1cm4gbmJ5dGVzOworfQorCisvKgorICogRGVjb2RlIHRoZSBuZXh0IFVuaWNvZGUgY29kZXBv aW50IGZyb20gVVRGOCBhdCBzcmMsIHJlYWRpbmcgbm8gbW9yZSB0aGFuCisgKiBzcmNsZW4gYnl0 ZXMgKHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgMSkuIE9uIHN1Y2Nlc3MsICpwY29kZXBvaW50IHdp bGwgYmUgYQorICogdmFsaWQgVW5pY29kZSBTY2FsYXI7IG90aGVyd2lzZSBpdCB3aWxsIGJlIHNl dCB0byBQR19JTlZBTElEX0NPREVQT0lOVC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgY29uc3VtZWQuIElmIHNyY2xlbiBpcyBub3QgbGFyZ2UgZW5vdWdoCisgKiAoaS5lLiBz cmMgaXMgdHJ1bmNhdGVkIGluIHRoZSBtaWRkbGUgb2YgYSBzZXF1ZW5jZSksIHJldHVybnMgMC4g SWYgaW52YWxpZCwKKyAqIHJldHVybnMgLTEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1dGY4 ZGVjb2RlKGNoYXIzMl90ICpwY29kZXBvaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNp emVfdCBzcmNsZW4pCit7CisJaW50CQkJbmJ5dGVzOworCWNoYXIzMl90CWNvZGVwb2ludDsKKwlj aGFyMzJfdAltaW47CisKKwlBc3NlcnQoc3JjbGVuID49IDEpOworCisJaWYgKCgqc3JjICYgMHg4 MCkgPT0gMCkKKwl7CisJCSpwY29kZXBvaW50ID0gKGNoYXIzMl90KSBzcmNbMF07CisJCXJldHVy biAxOworCX0KKwllbHNlIGlmICgoKnNyYyAmIDB4ZTApID09IDB4YzApCisJeworCQluYnl0ZXMg PSAyOworCQltaW4gPSAweDgwOworCQljb2RlcG9pbnQgPSAoY2hhcjMyX3QpIHNyY1swXSAmIDB4 MWY7CisJfQorCWVsc2UgaWYgKCgqc3JjICYgMHhmMCkgPT0gMHhlMCkKKwl7CisJCW5ieXRlcyA9 IDM7CisJCW1pbiA9IDB4ODAwOworCQljb2RlcG9pbnQgPSAoY2hhcjMyX3QpIHNyY1swXSAmIDB4 MGY7CisJfQorCWVsc2UgaWYgKCgqc3JjICYgMHhmOCkgPT0gMHhmMCkKKwl7CisJCW5ieXRlcyA9 IDQ7CisJCW1pbiA9IDB4MTAwMDA7CisJCWNvZGVwb2ludCA9IChjaGFyMzJfdCkgc3JjWzBdICYg MHgwNzsKKwl9CisJZWxzZQorCQlnb3RvIGludmFsaWQ7CQkJLyogaW52YWxpZCBsZWFkaW5nIGJ5 dGUgKi8KKworCS8qIHRydW5jYXRlZCBtdWx0aWJ5dGUgc2VxdWVuY2UgKi8KKwlpZiAoc3JjbGVu IDwgKHNpemVfdCkgbmJ5dGVzKQorCXsKKwkJKnBjb2RlcG9pbnQgPSBQR19JTlZBTElEX0NPREVQ T0lOVDsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpbnQgaSA9IDE7IGkgPCBuYnl0ZXM7IGkr KykKKwl7CisJCWlmICgoc3JjW2ldICYgMHhjMCkgIT0gMHg4MCkKKwkJCWdvdG8gaW52YWxpZDsK KwkJY29kZXBvaW50ID0gKGNvZGVwb2ludCA8PCA2KSB8IChzcmNbaV0gJiAweDNmKTsKKwl9CisK KwkvKiByZWplY3Qgb3ZlcmxvbmcsIHN1cnJvZ2F0ZSwgYW5kIG91dC1vZi1yYW5nZSAqLworCWlm IChjb2RlcG9pbnQgPCBtaW4gfHwgY29kZXBvaW50ID4gMHgxMEZGRkYgfHwKKwkJKGNvZGVwb2lu dCA+PSAweEQ4MDAgJiYgY29kZXBvaW50IDw9IDB4REZGRikpCisJCWdvdG8gaW52YWxpZDsKKwor CSpwY29kZXBvaW50ID0gY29kZXBvaW50OworCXJldHVybiBuYnl0ZXM7CisKK2ludmFsaWQ6CisJ KnBjb2RlcG9pbnQgPSBQR19JTlZBTElEX0NPREVQT0lOVDsKKwlyZXR1cm4gLTE7Cit9CisKIC8q CiAgKiBDb252ZXJ0IGEgVVRGLTggY2hhcmFjdGVyIHRvIGEgVW5pY29kZSBjb2RlIHBvaW50Lgog ICogVGhpcyBpcyBhIG9uZS1jaGFyYWN0ZXIgdmVyc2lvbiBvZiBwZ191dGYyd2NoYXJfd2l0aF9s ZW4uCiAgKgogICogTm8gZXJyb3IgY2hlY2tzIGhlcmUsIGMgbXVzdCBwb2ludCB0byBhIGxvbmct ZW5vdWdoIHN0cmluZy4KKyAqCisgKiBYWFg6IENhbGxlcnMgc2hvdWxkIGNvbnNpZGVyIHV0Zjhk ZWNvZGUoKSBpbnN0ZWFkLgogICovCiBzdGF0aWMgaW5saW5lIGNoYXIzMl90CiB1dGY4X3RvX3Vu aWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqYykKQEAgLTQxNiwxMyArNTUwLDE0IEBAIHV0Zjhf dG9fdW5pY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpjKQogCQkJCQkJICAgKChjWzJdICYgMHgz ZikgPDwgNikgfAogCQkJCQkJICAgKGNbM10gJiAweDNmKSk7CiAJZWxzZQotCQkvKiB0aGF0IGlz IGFuIGludmFsaWQgY29kZSBvbiBwdXJwb3NlICovCi0JCXJldHVybiAweGZmZmZmZmZmOworCQly ZXR1cm4gUEdfSU5WQUxJRF9DT0RFUE9JTlQ7CiB9CiAKIC8qCiAgKiBNYXAgYSBVbmljb2RlIGNv ZGUgcG9pbnQgdG8gVVRGLTguICB1dGY4c3RyaW5nIG11c3QgaGF2ZSBhdCBsZWFzdAogICogdW5p Y29kZV91dGY4bGVuKGMpIGJ5dGVzIGF2YWlsYWJsZS4KKyAqCisgKiBYWFg6IENhbGxlcnMgc2hv dWxkIGNvbnNpZGVyIHV0ZjhlbmNvZGUoKSBpbnN0ZWFkLgogICovCiBzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGNoYXIgKgogdW5pY29kZV90b191dGY4KGNoYXIzMl90IGMsIHVuc2lnbmVkIGNoYXIg KnV0ZjhzdHJpbmcpCi0tIAoyLjQzLjAKCg== --=-kUBTNItnaiGtEqo7SZSW Content-Disposition: attachment; filename*0=v6-0002-unicode_case.c-use-new-utf8encode-utf8decode-APIs.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="v6-0002-unicode_case.c-use-new-utf8encode-utf8decode-APIs.patch"; charset="UTF-8" RnJvbSAyZDljMDNmNzg2ZGIwNjdiZmEwZDg5ZThhYjdmM2IxZWU1ZTFiMGMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDE5IEp1biAyMDI2IDE0OjU4OjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NiAyLzJdIHVu aWNvZGVfY2FzZS5jOiB1c2UgbmV3IHV0ZjhlbmNvZGUvdXRmOGRlY29kZSBBUElzLgoKUmV2aWV3 ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vYzM1NTM1NGU2YzNmNGE3YWFmYjA0NzM2MWI3M2RiMjQ3MjYwZmNhMC5j YW1lbEBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jIHwgMTAgKy0tCiBzcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMgICAgICAgICAg ICB8IDQ1ICsrKysrKysrKy0tLS0KIHNyYy9jb21tb24vdW5pY29kZV9jYXNlLmMgICAgICAgICAg ICAgICAgIHwgNzcgKysrKysrKysrKystLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNzcg aW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlX2J1aWx0aW4uYwppbmRleCA1NjE5ZGFmNDNjMy4uNjM1MTZlNzE3NGYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCkBAIC02MiwyMiArNjIsMjIgQEAg aW5pdGNhcF93Ym5leHQodm9pZCAqc3RhdGUpCiAKIAl3aGlsZSAod2JzdGF0ZS0+b2Zmc2V0IDwg d2JzdGF0ZS0+bGVuKQogCXsKLQkJaW50CQkJdWxlbiA9IHBnX3V0Zl9tYmxlbigoY29uc3QgdW5z aWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKwotCQkJCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7 CisJCWludAkJCXVsZW47CiAJCWNoYXIzMl90CXU7CiAJCWJvb2wJCWN1cnJfYWxudW07CiAJCXNp emVfdAkJcHJldl9vZmZzZXQgPSB3YnN0YXRlLT5vZmZzZXQ7CiAKKwkJdWxlbiA9IHV0ZjhkZWNv ZGUoJnUsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciArIHdic3RhdGUtPm9m ZnNldCwKKwkJCQkJCSAgd2JzdGF0ZS0+bGVuIC0gd2JzdGF0ZS0+b2Zmc2V0KTsKKwogCQkvKiBp bnZhbGlkIFVURjggKi8KLQkJaWYgKHdic3RhdGUtPm9mZnNldCArIHVsZW4gPiB3YnN0YXRlLT5s ZW4pCisJCWlmICh1bGVuIDw9IDApCiAJCXsKIAkJCXdic3RhdGUtPmluaXQgPSB0cnVlOwogCQkJ d2JzdGF0ZS0+b2Zmc2V0ID0gd2JzdGF0ZS0+bGVuOwogCQkJcmV0dXJuIHByZXZfb2Zmc2V0Owog CQl9CiAKLQkJdSA9IHV0ZjhfdG9fdW5pY29kZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSB3YnN0 YXRlLT5zdHIgKwotCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7CiAJCWN1cnJfYWxudW0gPSBwZ191 X2lzYWxudW0odSwgd2JzdGF0ZS0+cG9zaXgpOwogCiAJCWlmICghd2JzdGF0ZS0+aW5pdCB8fCBj dXJyX2FsbnVtICE9IHdic3RhdGUtPnByZXZfYWxudW0pCmRpZmYgLS1naXQgYS9zcmMvY29tbW9u L3VuaWNvZGUvY2FzZV90ZXN0LmMgYi9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMKaW5k ZXggMDg0MjFkOWU1Y2EuLjIyZjNmOTA2NGI2IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNv ZGUvY2FzZV90ZXN0LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2Nhc2VfdGVzdC5jCkBAIC01 MiwyNCArNTIsMzUgQEAgaW5pdGNhcF93Ym5leHQodm9pZCAqc3RhdGUpCiB7CiAJc3RydWN0IFdv cmRCb3VuZGFyeVN0YXRlICp3YnN0YXRlID0gKHN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZSAqKSBz dGF0ZTsKIAotCXdoaWxlICh3YnN0YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4gJiYKLQkJICAg d2JzdGF0ZS0+c3RyW3dic3RhdGUtPm9mZnNldF0gIT0gJ1wwJykKKwl3aGlsZSAod2JzdGF0ZS0+ b2Zmc2V0IDwgd2JzdGF0ZS0+bGVuKQogCXsKLQkJY2hhcjMyX3QJdSA9IHV0ZjhfdG9fdW5pY29k ZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKwotCQkJCQkJCQkJCXdic3Rh dGUtPm9mZnNldCk7Ci0JCWJvb2wJCWN1cnJfYWxudW0gPSBwZ191X2lzYWxudW0odSwgd2JzdGF0 ZS0+cG9zaXgpOworCQlpbnQJCQl1bGVuOworCQljaGFyMzJfdAl1OworCQlib29sCQljdXJyX2Fs bnVtOworCQlzaXplX3QJCXByZXZfb2Zmc2V0ID0gd2JzdGF0ZS0+b2Zmc2V0OwogCi0JCWlmICgh d2JzdGF0ZS0+aW5pdCB8fCBjdXJyX2FsbnVtICE9IHdic3RhdGUtPnByZXZfYWxudW0pCisJCXVs ZW4gPSB1dGY4ZGVjb2RlKCZ1LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIg KyB3YnN0YXRlLT5vZmZzZXQsCisJCQkJCQkgIHdic3RhdGUtPmxlbiAtIHdic3RhdGUtPm9mZnNl dCk7CisKKwkJLyogaW52YWxpZCBVVEY4ICovCisJCWlmICh1bGVuIDw9IDApCiAJCXsKLQkJCXNp emVfdAkJcHJldl9vZmZzZXQgPSB3YnN0YXRlLT5vZmZzZXQ7CisJCQl3YnN0YXRlLT5pbml0ID0g dHJ1ZTsKKwkJCXdic3RhdGUtPm9mZnNldCA9IHdic3RhdGUtPmxlbjsKKwkJCXJldHVybiBwcmV2 X29mZnNldDsKKwkJfQorCisJCWN1cnJfYWxudW0gPSBwZ191X2lzYWxudW0odSwgd2JzdGF0ZS0+ cG9zaXgpOwogCisJCWlmICghd2JzdGF0ZS0+aW5pdCB8fCBjdXJyX2FsbnVtICE9IHdic3RhdGUt PnByZXZfYWxudW0pCisJCXsKIAkJCXdic3RhdGUtPmluaXQgPSB0cnVlOwotCQkJd2JzdGF0ZS0+ b2Zmc2V0ICs9IHVuaWNvZGVfdXRmOGxlbih1KTsKKwkJCXdic3RhdGUtPm9mZnNldCArPSB1bGVu OwogCQkJd2JzdGF0ZS0+cHJldl9hbG51bSA9IGN1cnJfYWxudW07CiAJCQlyZXR1cm4gcHJldl9v ZmZzZXQ7CiAJCX0KIAotCQl3YnN0YXRlLT5vZmZzZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOwor CQl3YnN0YXRlLT5vZmZzZXQgKz0gdWxlbjsKIAl9CiAKIAlyZXR1cm4gd2JzdGF0ZS0+bGVuOwpA QCAtMTc5LDcgKzE5MCw3IEBAIHRlc3RfaWN1KHZvaWQpCiAJewogCQlwZ191bmljb2RlX2NhdGVn b3J5IGNhdGVnb3J5ID0gdW5pY29kZV9jYXRlZ29yeShjb2RlKTsKIAotCQlpZiAoY2F0ZWdvcnkg IT0gUEdfVV9VTkFTU0lHTkVEKQorCQlpZiAoY2F0ZWdvcnkgIT0gUEdfVV9VTkFTU0lHTkVEICYm IGNhdGVnb3J5ICE9IFBHX1VfU1VSUk9HQVRFKQogCQl7CiAJCQl1aW50OF90CQlpY3VfY2F0ZWdv cnkgPSB1X2NoYXJUeXBlKGNvZGUpOwogCQkJY2hhcgkJY29kZV9zdHJbNV0gPSB7MH07CkBAIC0x OTEsNyArMjAyLDcgQEAgdGVzdF9pY3Uodm9pZCkKIAkJCX0KIAogCQkJaWN1X3Rlc3Rfc2ltcGxl KGNvZGUpOwotCQkJdW5pY29kZV90b191dGY4KGNvZGUsICh1bnNpZ25lZCBjaGFyICopIGNvZGVf c3RyKTsKKwkJCXV0ZjhlbmNvZGUoKHVuc2lnbmVkIGNoYXIgKikgY29kZV9zdHIsIDUsIGNvZGUp OwogCQkJaWN1X3Rlc3RfZnVsbChjb2RlX3N0cik7CiAKIAkJCXN1Y2Nlc3NmdWwrKzsKQEAgLTMz Nyw2ICszNDgsMTggQEAgdGVzdF9jb252ZXJ0X2Nhc2Uodm9pZCkKIAkvKiBpbnZhbGlkIFVURjg6 IGxlYWRpbmcgYnl0ZSBpbnZhbGlkIGxlbmd0aCAqLwogCW5lZWRlZCA9IHVuaWNvZGVfc3RyZm9s ZChOVUxMLCAwLCAiYWJjXHhGOHh5eiIsIDcsICZjb25zdW1lZCwgZmFsc2UpOwogCUFzc2VydChu ZWVkZWQgPT0gMyAmJiBjb25zdW1lZCA9PSAzKTsKKwkvKiBpbnZhbGlkIFVURjg6IHN1cnJvZ2F0 ZXMgKi8KKwluZWVkZWQgPSB1bmljb2RlX3N0cmZvbGQoTlVMTCwgMCwgImFiY1x4RURceEEwXHg4 MXh5eiIsIDksICZjb25zdW1lZCwgZmFsc2UpOworCUFzc2VydChuZWVkZWQgPT0gMyAmJiBjb25z dW1lZCA9PSAzKTsKKwkvKiBpbnZhbGlkIFVURjg6IGNvbnRpbnVhdGlvbiB3aXRoIG5vIGxlYWRp bmcgYnl0ZSAqLworCW5lZWRlZCA9IHVuaWNvZGVfc3RyZm9sZChOVUxMLCAwLCAiYWJjXHg4MHh5 eiIsIDcsICZjb25zdW1lZCwgZmFsc2UpOworCUFzc2VydChuZWVkZWQgPT0gMyAmJiBjb25zdW1l ZCA9PSAzKTsKKwkvKiBpbnZhbGlkIFVURjg6IG91dCBvZiByYW5nZSAqLworCW5lZWRlZCA9IHVu aWNvZGVfc3RyZm9sZChOVUxMLCAwLCAiYWJjXHhGNVx4ODBceDgwXHg4MHh5eiIsIDEwLCAmY29u c3VtZWQsIGZhbHNlKTsKKwlBc3NlcnQobmVlZGVkID09IDMgJiYgY29uc3VtZWQgPT0gMyk7CisJ LyogaW52YWxpZCBVVEY4OiBvdmVybG9uZyAqLworCW5lZWRlZCA9IHVuaWNvZGVfc3RyZm9sZChO VUxMLCAwLCAiYWJjXHhDMVx4QkZ4eXoiLCA4LCAmY29uc3VtZWQsIGZhbHNlKTsKKwlBc3NlcnQo bmVlZGVkID09IDMgJiYgY29uc3VtZWQgPT0gMyk7CiAKICNpZmRlZiBVU0VfSUNVCiAJaWN1X3Rl c3RfZnVsbCgiIik7CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jIGIvc3Jj L2NvbW1vbi91bmljb2RlX2Nhc2UuYwppbmRleCAyNDc1M2FhYWIwOS4uNGQ4ZWU3MWU4ZGMgMTAw NjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKKysrIGIvc3JjL2NvbW1vbi91bmlj b2RlX2Nhc2UuYwpAQCAtMTk0LDIyICsxOTQsNiBAQCB1bmljb2RlX3N0cmZvbGQoY2hhciAqZHN0 LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQkJCQkJ TlVMTCwgTlVMTCk7CiB9CiAKLS8qIGxvY2FsIHZlcnNpb24gb2YgcGdfdXRmX21ibGVuKCkgdG8g YmUgaW5saW5hYmxlICovCi1zdGF0aWMgaW50Ci11dGY4X21ibGVuKGNvbnN0IHVuc2lnbmVkIGNo YXIgKnMpCi17Ci0JaWYgKCgqcyAmIDB4ODApID09IDApCi0JCXJldHVybiAxOwotCWVsc2UgaWYg KCgqcyAmIDB4ZTApID09IDB4YzApCi0JCXJldHVybiAyOwotCWVsc2UgaWYgKCgqcyAmIDB4ZjAp ID09IDB4ZTApCi0JCXJldHVybiAzOwotCWVsc2UgaWYgKCgqcyAmIDB4ZjgpID09IDB4ZjApCi0J CXJldHVybiA0OwotCWVsc2UKLQkJcmV0dXJuIC0xOwotfQotCiAvKgogICogSW1wbGVtZW50IFVu aWNvZGUgRGVmYXVsdCBDYXNlIENvbnZlcnNpb24gYWxnb3JpdGhtLgogICoKQEAgLTI0OCwxOCAr MjMyLDE5IEBAIGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAKIAl3aGlsZSAoc3Jjb2ZmIDwgc3JjbGVuKQogCXsK LQkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNyYyAr IHNyY29mZik7CiAJCWNoYXIzMl90CXUxOworCQlpbnQJCQl1MWxlbjsKIAkJY2hhcjMyX3QJc2lt cGxlID0gMDsKIAkJY29uc3QgY2hhcjMyX3QgKnNwZWNpYWwgPSBOVUxMOwogCQllbnVtIENhc2VN YXBSZXN1bHQgY2FzZW1hcF9yZXN1bHQ7CiAKKwkJdTFsZW4gPSB1dGY4ZGVjb2RlKCZ1MSwgKGNv bnN0IHVuc2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmLAorCQkJCQkJICAgc3JjbGVuIC0gc3Jj b2ZmKTsKKwogCQkvKiBpbnZhbGlkIFVURjggKi8KLQkJaWYgKHUxbGVuIDwgMCB8fCBzcmNvZmYg KyB1MWxlbiA+IHNyY2xlbikKKwkJaWYgKHUxbGVuIDw9IDApCiAJCQlicmVhazsKIAotCQl1MSA9 IHV0ZjhfdG9fdW5pY29kZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzcmMgKyBzcmNvZmYpOwot CiAJCWlmIChzdHJfY2FzZWtpbmQgPT0gQ2FzZVRpdGxlKQogCQl7CiAJCQlpZiAoc3Jjb2ZmID09 IGJvdW5kYXJ5KQpAQCAtMjgwLDYgKzI2NSw3IEBAIGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNp emVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJCQkJLyogbm8g bWFwcGluZzsgY29weSBieXRlcyBmcm9tIHNyYyAqLwogCQkJCUFzc2VydChzaW1wbGUgPT0gMCk7 CiAJCQkJQXNzZXJ0KHNwZWNpYWwgPT0gTlVMTCk7CisKIAkJCQlpZiAocmVzdWx0X2xlbiArIHUx bGVuIDw9IGRzdHNpemUpCiAJCQkJCW1lbWNweShkc3QgKyByZXN1bHRfbGVuLCBzcmMgKyBzcmNv ZmYsIHUxbGVuKTsKIApAQCAtMjg5LDExICsyNzUsMTkgQEAgY29udmVydF9jYXNlKGNoYXIgKmRz dCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAkJCQl7 CiAJCQkJCS8qIHJlcGxhY2Ugd2l0aCBzaW5nbGUgY2hhcmFjdGVyICovCiAJCQkJCWNoYXIzMl90 CXUyID0gc2ltcGxlOwotCQkJCQljaGFyMzJfdAl1MmxlbiA9IHVuaWNvZGVfdXRmOGxlbih1Mik7 CisJCQkJCWludAkJCXUybGVuOworCQkJCQlzaXplX3QJCXJlbWFpbmluZyA9IDA7CisJCQkJCXVu c2lnbmVkIGNoYXIgKnAgPSBOVUxMOworCisJCQkJCWlmIChkc3RzaXplID4gcmVzdWx0X2xlbikK KwkJCQkJeworCQkJCQkJcmVtYWluaW5nID0gZHN0c2l6ZSAtIHJlc3VsdF9sZW47CisJCQkJCQlw ID0gKHVuc2lnbmVkIGNoYXIgKikgZHN0ICsgcmVzdWx0X2xlbjsKKwkJCQkJfQogCiAJCQkJCUFz c2VydChzcGVjaWFsID09IE5VTEwpOwotCQkJCQlpZiAocmVzdWx0X2xlbiArIHUybGVuIDw9IGRz dHNpemUpCi0JCQkJCQl1bmljb2RlX3RvX3V0ZjgodTIsICh1bnNpZ25lZCBjaGFyICopIGRzdCAr IHJlc3VsdF9sZW4pOworCQkJCQl1MmxlbiA9IHV0ZjhlbmNvZGUocCwgcmVtYWluaW5nLCB1Mik7 CisJCQkJCUFzc2VydCh1MmxlbiA+IDApOwogCiAJCQkJCXJlc3VsdF9sZW4gKz0gdTJsZW47CiAJ CQkJfQpAQCAtMzA0LDEwICsyOTgsMTggQEAgY29udmVydF9jYXNlKGNoYXIgKmRzdCwgc2l6ZV90 IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAkJCQlmb3IgKGludCBp ID0gMDsgaSA8IE1BWF9DQVNFX0VYUEFOU0lPTiAmJiBzcGVjaWFsW2ldOyBpKyspCiAJCQkJewog CQkJCQljaGFyMzJfdAl1MiA9IHNwZWNpYWxbaV07Ci0JCQkJCXNpemVfdAkJdTJsZW4gPSB1bmlj b2RlX3V0ZjhsZW4odTIpOworCQkJCQlpbnQJCQl1MmxlbjsKKwkJCQkJc2l6ZV90CQlyZW1haW5p bmcgPSAwOworCQkJCQl1bnNpZ25lZCBjaGFyICpwID0gTlVMTDsKKworCQkJCQlpZiAoZHN0c2l6 ZSA+IHJlc3VsdF9sZW4pCisJCQkJCXsKKwkJCQkJCXJlbWFpbmluZyA9IGRzdHNpemUgLSByZXN1 bHRfbGVuOworCQkJCQkJcCA9ICh1bnNpZ25lZCBjaGFyICopIGRzdCArIHJlc3VsdF9sZW47CisJ CQkJCX0KIAotCQkJCQlpZiAocmVzdWx0X2xlbiArIHUybGVuIDw9IGRzdHNpemUpCi0JCQkJCQl1 bmljb2RlX3RvX3V0ZjgodTIsICh1bnNpZ25lZCBjaGFyICopIGRzdCArIHJlc3VsdF9sZW4pOwor CQkJCQl1MmxlbiA9IHV0ZjhlbmNvZGUocCwgcmVtYWluaW5nLCB1Mik7CisJCQkJCUFzc2VydCh1 MmxlbiA+IDApOwogCiAJCQkJCXJlc3VsdF9sZW4gKz0gdTJsZW47CiAJCQkJfQpAQCAtMzUyLDEz ICszNTQsMTAgQEAgY2hlY2tfZmluYWxfc2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBz aXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0KQogCQkvKiBub3cgYXQgbGVhZGluZyBieXRlIG9mIHBy ZXZpb3VzIHNlcXVlbmNlICovCiAJCUFzc2VydCgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAoc3Ry W2ldICYgMHhDMCkgPT0gMHhDMCk7CiAKLQkJdWxlbiA9IHV0ZjhfbWJsZW4oKGNvbnN0IHVuc2ln bmVkIGNoYXIgKikgc3RyICsgaSk7Ci0KLQkJLyogaW52YWxpZCBVVEY4ICovCi0JCWlmICh1bGVu IDwgMCB8fCBpICsgdWxlbiA+IGxlbikKLQkJCXJldHVybiBmYWxzZTsKKwkJdWxlbiA9IHV0Zjhk ZWNvZGUoJmN1cnIsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIGksIGxlbiAtIGkpOwog Ci0JCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyICsg aSk7CisJCWlmICh1bGVuIDw9IDApCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBpbnZhbGlkIFVURjgg Ki8KIAogCQlpZiAoIXBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShjdXJyKSkKIAkJewpAQCAtMzY3 LDE4ICszNjYsMTggQEAgY2hlY2tfZmluYWxfc2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3Ry LCBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0KQogCQl9CiAJfQogCi0JdWxlbiA9IHV0ZjhfbWJs ZW4oKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyICsgb2Zmc2V0KTsKKwl1bGVuID0gdXRmOGRl Y29kZSgmY3VyciwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyICsgb2Zmc2V0LAorCQkJCQkg IGxlbiAtIG9mZnNldCk7CisJaWYgKHVsZW4gPD0gMCkKKwkJcmV0dXJuIGZhbHNlOwkJCS8qIGlu dmFsaWQgVVRGOCAqLwogCiAJLyogaXRlcmF0ZSBmb3J3YXJkIGxvb2tpbmcgZm9yIGZvbGxvd2lu ZyBjaGFyYWN0ZXIgKi8KIAlmb3IgKGludCBpID0gb2Zmc2V0ICsgdWxlbjsgaSA8IGxlbjspCiAJ ewotCQl1bGVuID0gdXRmOF9tYmxlbigoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIgKyBpKTsK LQotCQkvKiBpbnZhbGlkIFVURjggKi8KLQkJaWYgKHVsZW4gPCAwIHx8IGkgKyB1bGVuID4gbGVu KQotCQkJcmV0dXJuIGZhbHNlOworCQl1bGVuID0gdXRmOGRlY29kZSgmY3VyciwgKGNvbnN0IHVu c2lnbmVkIGNoYXIgKikgc3RyICsgaSwgbGVuIC0gaSk7CiAKLQkJY3VyciA9IHV0ZjhfdG9fdW5p Y29kZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIgKyBpKTsKKwkJaWYgKHVsZW4gPD0gMCkK KwkJCXJldHVybiBmYWxzZTsJCS8qIGludmFsaWQgVVRGOCAqLwogCiAJCWlmICghcGdfdV9wcm9w X2Nhc2VfaWdub3JhYmxlKGN1cnIpKQogCQl7Ci0tIAoyLjQzLjAKCg== --=-kUBTNItnaiGtEqo7SZSW--