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 1wbqTD-002tAH-0F for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jun 2026 02:02:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wbqTB-008yRb-2N for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jun 2026 02:02:33 +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 1wbqTB-008yRR-0r for pgsql-hackers@lists.postgresql.org; Tue, 23 Jun 2026 02:02:33 +0000 Received: from mail-dy1-x132a.google.com ([2607:f8b0:4864:20::132a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wbqT8-00000001qdU-15Fn for pgsql-hackers@postgresql.org; Tue, 23 Jun 2026 02:02:32 +0000 Received: by mail-dy1-x132a.google.com with SMTP id 5a478bee46e88-30c52cc5285so1309378eec.1 for ; Mon, 22 Jun 2026 19:02:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20251104.gappssmtp.com; s=20251104; t=1782180148; x=1782784948; 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=OubqhCrlg/8X6JmNXDDTA0cyT13Np22YmanxSV35Wzw=; b=vx6saWRGqWw00VMdT6N7CeKXUGgxsu+9R3dlwZ0JnW2YyD4UxwU9+aE3LxO3THEIDt NOusaP+QKYse25Brs5qZFh+ABu07u5V3NUdLgKA+ikm+CYkYOgXYg8WDJvObpiEd7wuC 5eKHPVc/IqjmjP3ZXEBLEFBzbIs1+vve5cQum1kghHcfesofdV3A86o+asXBd+RdPdM5 hgl0RLnevydPlk/GN6N/qNX4M2rgJOr5Jo4Dqaq2i9ztr8gwosxi3u0jU3dlyPXWKwmj YGlPcNhcobVc4mvymVmUJcE6+RhgE8173FYA0JG7HRPmMB/ptaIK5aKTTumzSdpxdqJb Mszw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782180148; x=1782784948; 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=OubqhCrlg/8X6JmNXDDTA0cyT13Np22YmanxSV35Wzw=; b=poAnW0RxyAyX9KqoeMRqw+/xwdqoc735P3fcIjQqEB3ikJPPqVY6p1RoCoh2sl09mZ QWO0IE7O1t2AHWFX88Hx4nXGfDP17UYDfRpMo7UXMQEwohGQ8oddOnRnA+dVyXtzOvad UY3Zhjvs44EZMfpzZnkyxFLlgrWNGCaRez53F0K47a9grmmXdPheKeVtAV7T5PVPwqZ3 yfeO97bJaUo6qNEw741G9xI3n4PDnuMXQV6ZC1uWC6NXeM3+jK5oNTb0R4qwYpJ5VDdn V+yYPYT5WDEBK0rJn9VWF0vSyrkXnUmXQFMPrFlA163HnLVSF+ZECfYemIHIjmY0LhUq UhUQ== X-Gm-Message-State: AOJu0Yx0Ih8X3Ugdl1MxK0I8Azqj/hQrMJYWfWds3g+ft3H0Ga49wMR4 EHediA3e1uTZKDEidhg9fcBPP4O0eNfzlsX34YT6GLJgbNr1Sw3oP0poWVXqZpzGKQ== X-Gm-Gg: AfdE7cn9ygJdvJ8lteOwMh2R/6tf9nbEDBs6miWcDPy3FoAcFLw++aYkjQDsPN5cp/Z gc0qbf92UbdwGvqj9j7HS/+A/xcugRTstDqk4OqLC0ICuD3QQeFuknpe/KKrNraK+UqH1MOEkDp hJ5MhOHYgsEBN00Ucj1E1VIG9jGHFIf1gI8aLUItV3ufyGclEdUBD98HVdldZdJjymR48297peO Up0/ukjQgAHPMCBsqRz7ppiGKPrfb0WITSXEiPK2iLzyaBycJmJg8NvO2ySMuNyGyGkDkK0xF7m X1prYX2pCZ9sc/JtxkuRyV53QHh8mc19MTD9tlWL/EeKlDmPTI9RLsF5ki8SZkD4dB92LZfzgi/ nDXspPTwHmzc7UCv887JMm9qEtDirSj2x23XlmMF+Aei5nIu0T+57VjN65x5kxllfpPW90EjcQ8 7rqfm+MTjSWkJbLZE8UotnCCzK9EcrYAR5u7OB31muj3ZL4g== X-Received: by 2002:a05:7301:38a4:b0:2f2:6dde:df66 with SMTP id 5a478bee46e88-30c06e303ddmr12522468eec.22.1782180147455; Mon, 22 Jun 2026 19:02:27 -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 5a478bee46e88-30c1bd8d6edsm12971391eec.14.2026.06.22.19.02.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jun 2026 19:02:26 -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: Mon, 22 Jun 2026 19:02:25 -0700 In-Reply-To: References: <541F240E-94AD-4D65-9794-7D6C316BC3FF@gmail.com> Content-Type: multipart/mixed; boundary="=-3wI5cyGmcXXi5ET9/z75" 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 --=-3wI5cyGmcXXi5ET9/z75 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2026-06-19 at 16:22 -0700, Jeff Davis wrote: > On Wed, 2025-12-17 at 11:37 -0800, Jeff Davis wrote: > > On Tue, 2025-12-16 at 07:34 +0800, Chao Li wrote: > > > > > > >=20 > > > V2 LGTM. > >=20 > > On second thought, if we're going to change something here, we > > should > > probably have a more flexible API for both utf8_to_unicode() and > > unicode_to_utf8(). v4 attached. The main difference is that the first patch is more backportable. For backbranches, I think the safest thing if we encounter invalid UTF8 is to just terminate and return early. In master, we can change the API to properly return the error upward. Performance is not affected much, though in my brief tests it appeared that 0002 lost a bit and then 0004 gained it back. But we gain full UTF8 validation and safer UTF8 iterator APIs. Regards, Jeff Davis --=-3wI5cyGmcXXi5ET9/z75 Content-Disposition: attachment; filename="v4-0001-unicode_case.c-defend-against-invalid-UTF8.patch" Content-Type: text/x-patch; name="v4-0001-unicode_case.c-defend-against-invalid-UTF8.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzY2NmMTRlMGQ2MjM0YWI0ZmNmMjRjZjU2ZjUzZjUxMjY0OWJjNjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDIyIEp1biAyMDI2IDE2OjMwOjAxIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NCAxLzRdIHVu aWNvZGVfY2FzZS5jOiBkZWZlbmQgYWdhaW5zdCBpbnZhbGlkIFVURjguCgpSZXZpZXdlZC1ieTog Q2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9jMzU1MzU0ZTZjM2Y0YTdhYWZiMDQ3MzYxYjczZGIyNDcyNjBmY2EwLmNhbWVsQGot ZGF2aXMuY29tCkJhY2twYXRjaC10aHJvdWdoOiAxNwotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGVfYnVpbHRpbi5jIHwgMjQgKysrKysrKystLS0KIHNyYy9jb21tb24vdW5pY29k ZV9jYXNlLmMgICAgICAgICAgICAgICAgIHwgNTIgKysrKysrKysrKysrKysrKysrKy0tLS0KIDIg ZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYwppbmRleCAwMWQ0ZjU1YjA3ZS4uN2Mz NmZkNTA5MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCkBA IC02MiwyMSArNjIsMzMgQEAgaW5pdGNhcF93Ym5leHQodm9pZCAqc3RhdGUpCiAKIAl3aGlsZSAo d2JzdGF0ZS0+b2Zmc2V0IDwgd2JzdGF0ZS0+bGVuKQogCXsKLQkJY2hhcjMyX3QJdSA9IHV0Zjhf dG9fdW5pY29kZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKworCQlpbnQJ CQl1bGVuID0gcGdfdXRmX21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0 ciArCiAJCQkJCQkJCQkJd2JzdGF0ZS0+b2Zmc2V0KTsKLQkJYm9vbAkJY3Vycl9hbG51bSA9IHBn X3VfaXNhbG51bSh1LCB3YnN0YXRlLT5wb3NpeCk7CisJCWNoYXIzMl90CXU7CisJCWJvb2wJCWN1 cnJfYWxudW07CisJCXNpemVfdAkJcHJldl9vZmZzZXQgPSB3YnN0YXRlLT5vZmZzZXQ7CiAKLQkJ aWYgKCF3YnN0YXRlLT5pbml0IHx8IGN1cnJfYWxudW0gIT0gd2JzdGF0ZS0+cHJldl9hbG51bSkK KwkJLyogaW52YWxpZCBVVEY4ICovCisJCWlmICh3YnN0YXRlLT5vZmZzZXQgKyB1bGVuID4gd2Jz dGF0ZS0+bGVuKQogCQl7Ci0JCQlzaXplX3QJCXByZXZfb2Zmc2V0ID0gd2JzdGF0ZS0+b2Zmc2V0 OworCQkJd2JzdGF0ZS0+aW5pdCA9IHRydWU7CisJCQl3YnN0YXRlLT5vZmZzZXQgPSB3YnN0YXRl LT5sZW47CisJCQlyZXR1cm4gcHJldl9vZmZzZXQ7CisJCX0KIAorCQl1ID0gdXRmOF90b191bmlj b2RlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciArCisJCQkJCQkJd2JzdGF0 ZS0+b2Zmc2V0KTsKKwkJY3Vycl9hbG51bSA9IHBnX3VfaXNhbG51bSh1LCB3YnN0YXRlLT5wb3Np eCk7CisKKwkJaWYgKCF3YnN0YXRlLT5pbml0IHx8IGN1cnJfYWxudW0gIT0gd2JzdGF0ZS0+cHJl dl9hbG51bSkKKwkJewogCQkJd2JzdGF0ZS0+aW5pdCA9IHRydWU7Ci0JCQl3YnN0YXRlLT5vZmZz ZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOworCQkJd2JzdGF0ZS0+b2Zmc2V0ICs9IHVsZW47CiAJ CQl3YnN0YXRlLT5wcmV2X2FsbnVtID0gY3Vycl9hbG51bTsKIAkJCXJldHVybiBwcmV2X29mZnNl dDsKIAkJfQogCi0JCXdic3RhdGUtPm9mZnNldCArPSB1bmljb2RlX3V0ZjhsZW4odSk7CisJCXdi c3RhdGUtPm9mZnNldCArPSB1bGVuOwogCX0KIAogCXJldHVybiB3YnN0YXRlLT5sZW47CmRpZmYg LS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jIGIvc3JjL2NvbW1vbi91bmljb2RlX2Nh c2UuYwppbmRleCBkNmVlMDBiN2Q5Yy4uNDJlYjdkMjIyMTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb21t b24vdW5pY29kZV9jYXNlLmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYwpAQCAtMTg5 LDYgKzE4OSwyMiBAQCB1bmljb2RlX3N0cmZvbGQoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwg Y29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQkJCQkJTlVMTCk7CiB9CiAKKy8qIGxv Y2FsIHZlcnNpb24gb2YgcGdfdXRmX21ibGVuKCkgdG8gYmUgaW5saW5hYmxlICovCitzdGF0aWMg aW50Cit1dGY4X21ibGVuKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCit7CisJaWYgKCgqcyAmIDB4 ODApID09IDApCisJCXJldHVybiAxOworCWVsc2UgaWYgKCgqcyAmIDB4ZTApID09IDB4YzApCisJ CXJldHVybiAyOworCWVsc2UgaWYgKCgqcyAmIDB4ZjApID09IDB4ZTApCisJCXJldHVybiAzOwor CWVsc2UgaWYgKCgqcyAmIDB4ZjgpID09IDB4ZjApCisJCXJldHVybiA0OworCWVsc2UKKwkJcmV0 dXJuIC0xOworfQorCiAvKgogICogSW1wbGVtZW50IFVuaWNvZGUgRGVmYXVsdCBDYXNlIENvbnZl cnNpb24gYWxnb3JpdGhtLgogICoKQEAgLTIyNywxMiArMjQzLDE4IEBAIGNvbnZlcnRfY2FzZShj aGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4s CiAKIAl3aGlsZSAoc3Jjb2ZmIDwgc3JjbGVuKQogCXsKLQkJY2hhcjMyX3QJdTEgPSB1dGY4X3Rv X3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmKTsKLQkJaW50CQkJ dTFsZW4gPSB1bmljb2RlX3V0ZjhsZW4odTEpOworCQlpbnQJCQl1MWxlbiA9IHV0ZjhfbWJsZW4o KGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmKTsKKwkJY2hhcjMyX3QJdTE7CiAJ CWNoYXIzMl90CXNpbXBsZSA9IDA7CiAJCWNvbnN0IGNoYXIzMl90ICpzcGVjaWFsID0gTlVMTDsK IAkJZW51bSBDYXNlTWFwUmVzdWx0IGNhc2VtYXBfcmVzdWx0OwogCisJCS8qIGludmFsaWQgVVRG OCAqLworCQlpZiAodTFsZW4gPCAwIHx8IHNyY29mZiArIHUxbGVuID4gc3JjbGVuKQorCQkJYnJl YWs7CisKKwkJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3Jj ICsgc3Jjb2ZmKTsKKwogCQlpZiAoc3RyX2Nhc2VraW5kID09IENhc2VUaXRsZSkKIAkJewogCQkJ aWYgKHNyY29mZiA9PSBib3VuZGFyeSkKQEAgLTMxNiw3ICszMzgsMTQgQEAgY2hlY2tfZmluYWxf c2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0 KQogCXsKIAkJaWYgKChzdHJbaV0gJiAweDgwKSA9PSAwIHx8IChzdHJbaV0gJiAweEMwKSA9PSAw eEMwKQogCQl7Ci0JCQljaGFyMzJfdAljdXJyID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOwor CQkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciAr IGkpOworCQkJY2hhcjMyX3QJY3VycjsKKworCQkJLyogaW52YWxpZCBVVEY4ICovCisJCQlpZiAo dTFsZW4gPCAwIHx8IGkgKyB1MWxlbiA+IGxlbikKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCWN1 cnIgPSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgaSk7CiAKIAkJCWlmIChwZ191X3Byb3BfY2FzZV9p Z25vcmFibGUoY3VycikpCiAJCQkJY29udGludWU7CkBAIC0zMjcsOCArMzU2LDggQEAgY2hlY2tf ZmluYWxfc2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3Qg b2Zmc2V0KQogCQl9CiAJCWVsc2UgaWYgKChzdHJbaV0gJiAweEMwKSA9PSAweDgwKQogCQkJY29u dGludWU7Ci0KLQkJQXNzZXJ0KGZhbHNlKTsJCQkvKiBpbnZhbGlkIFVURi04ICovCisJCWVsc2UK KwkJCXJldHVybiBmYWxzZTsJCQkvKiBpbnZhbGlkIFVURjggKi8KIAl9CiAKIAkvKiBlbmQgb2Yg c3RyaW5nIGlzIG5vdCBmb2xsb3dlZCBieSBhIENhc2VkIGNoYXJhY3RlciAqLwpAQCAtMzQwLDcg KzM2OSwxNCBAQCBjaGVja19maW5hbF9zaWdtYShjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHNp emVfdCBsZW4sIHNpemVfdCBvZmZzZXQpCiAJewogCQlpZiAoKHN0cltpXSAmIDB4ODApID09IDAg fHwgKHN0cltpXSAmIDB4QzApID09IDB4QzApCiAJCXsKLQkJCWNoYXIzMl90CWN1cnIgPSB1dGY4 X3RvX3VuaWNvZGUoc3RyICsgaSk7CisJCQlpbnQJCQl1MWxlbiA9IHV0ZjhfbWJsZW4oKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKikgc3RyICsgaSk7CisJCQljaGFyMzJfdAljdXJyOworCisJCQkvKiBp bnZhbGlkIFVURjggKi8KKwkJCWlmICh1MWxlbiA8IDAgfHwgaSArIHUxbGVuID4gbGVuKQorCQkJ CXJldHVybiBmYWxzZTsKKworCQkJY3VyciA9IHV0ZjhfdG9fdW5pY29kZShzdHIgKyBpKTsKIAog CQkJaWYgKHBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShjdXJyKSkKIAkJCQljb250aW51ZTsKQEAg LTM1MSw4ICszODcsOCBAQCBjaGVja19maW5hbF9zaWdtYShjb25zdCB1bnNpZ25lZCBjaGFyICpz dHIsIHNpemVfdCBsZW4sIHNpemVfdCBvZmZzZXQpCiAJCX0KIAkJZWxzZSBpZiAoKHN0cltpXSAm IDB4QzApID09IDB4ODApCiAJCQljb250aW51ZTsKLQotCQlBc3NlcnQoZmFsc2UpOwkJCS8qIGlu dmFsaWQgVVRGLTggKi8KKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOwkJCS8qIGludmFsaWQgVVRG OCAqLwogCX0KIAogCXJldHVybiB0cnVlOwotLSAKMi40My4wCgo= --=-3wI5cyGmcXXi5ET9/z75 Content-Disposition: attachment; filename*0=v4-0002-unicode_case.c-change-API-to-signal-UTF8-decoding.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0002-unicode_case.c-change-API-to-signal-UTF8-decoding.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkMzYyMWE0MjAzN2U5MWEwMmIyNGM4OTc0YmQ0OGNlOWE0MmZlYmY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDIyIEp1biAyMDI2IDE2OjMxOjM4IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NCAyLzRdIHVu aWNvZGVfY2FzZS5jOiBjaGFuZ2UgQVBJIHRvIHNpZ25hbCBVVEY4IGRlY29kaW5nCiBlcnJvci4K CkVycm9ycyBhdCB0aGlzIHBvaW50IGFyZSBub3QgZXhwZWN0ZWQsIGJ1dCBpZiBlbmNvdW50ZXJl ZCwgc2lnbmFsIHRvCnRoZSBjYWxsZXIgc28gaXQgY2FuIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBl cnJvci4KClJldmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2MzNTUzNTRlNmMzZjRhN2FhZmIwNDczNjFiNzNk YjI0NzI2MGZjYTAuY2FtZWxAai1kYXZpcy5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2J1aWx0aW4uYyB8IDUwICsrKysrKysrKysrKysrKysrKystLS0tCiBzcmMvY29t bW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMgICAgICAgICAgICB8IDMzICsrKysrKysrKysrLS0tLQog c3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYyAgICAgICAgICAgICAgICAgfCA0NiArKysrKysrKysr KystLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2UuaCAgICAgICAgIHwg IDggKystLQogNCBmaWxlcyBjaGFuZ2VkLCA5NSBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4u YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCmluZGV4IDdjMzZm ZDUwOTFiLi41NjE5ZGFmNDNjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn X2xvY2FsZV9idWlsdGluLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9i dWlsdGluLmMKQEAgLTk4LDggKzk4LDE2IEBAIHN0YXRpYyBzaXplX3QKIHN0cmxvd2VyX2J1aWx0 aW4oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBz cmNsZW4sCiAJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gdW5pY29kZV9zdHJs b3dlcihkZXN0LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sCi0JCQkJCQkJbG9jYWxlLT5idWlsdGlu LmNhc2VtYXBfZnVsbCk7CisJc2l6ZV90CQljb25zdW1lZDsKKwlzaXplX3QJCXJlc3VsdDsKKwor CXJlc3VsdCA9IHVuaWNvZGVfc3RybG93ZXIoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLCAm Y29uc3VtZWQsCisJCQkJCQkJICBsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwlpZiAo Y29uc3VtZWQgPCBzcmNsZW4pCisJCXJlcG9ydF9pbnZhbGlkX2VuY29kaW5nKEdldERhdGFiYXNl RW5jb2RpbmcoKSwgc3JjICsgY29uc3VtZWQsCisJCQkJCQkJCXNyY2xlbiAtIGNvbnN1bWVkKTsK KworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBzaXplX3QKQEAgLTExNCwyNiArMTIyLDUw IEBAIHN0cnRpdGxlX2J1aWx0aW4oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJCS5pbml0ID0gZmFsc2UsCiAJCS5wcmV2X2FsbnVt ID0gZmFsc2UsCiAJfTsKKwlzaXplX3QJCWNvbnN1bWVkOworCXNpemVfdAkJcmVzdWx0OwogCi0J cmV0dXJuIHVuaWNvZGVfc3RydGl0bGUoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJ CQkJCWxvY2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwsCi0JCQkJCQkJaW5pdGNhcF93Ym5leHQs ICZ3YnN0YXRlKTsKKwlyZXN1bHQgPSB1bmljb2RlX3N0cnRpdGxlKGRlc3QsIGRlc3RzaXplLCBz cmMsIHNyY2xlbiwgJmNvbnN1bWVkLAorCQkJCQkJCSAgbG9jYWxlLT5idWlsdGluLmNhc2VtYXBf ZnVsbCwKKwkJCQkJCQkgIGluaXRjYXBfd2JuZXh0LCAmd2JzdGF0ZSk7CisKKwlpZiAoY29uc3Vt ZWQgPCBzcmNsZW4pCisJCXJlcG9ydF9pbnZhbGlkX2VuY29kaW5nKEdldERhdGFiYXNlRW5jb2Rp bmcoKSwgc3JjICsgY29uc3VtZWQsCisJCQkJCQkJCXNyY2xlbiAtIGNvbnN1bWVkKTsKKworCXJl dHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBzaXplX3QKIHN0cnVwcGVyX2J1aWx0aW4oY2hhciAq ZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJ CQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gdW5pY29kZV9zdHJ1cHBlcihkZXN0 LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sCi0JCQkJCQkJbG9jYWxlLT5idWlsdGluLmNhc2VtYXBf ZnVsbCk7CisJc2l6ZV90CQljb25zdW1lZDsKKwlzaXplX3QJCXJlc3VsdDsKKworCXJlc3VsdCA9 IHVuaWNvZGVfc3RydXBwZXIoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLCAmY29uc3VtZWQs CisJCQkJCQkJICBsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwlpZiAoY29uc3VtZWQg PCBzcmNsZW4pCisJCXJlcG9ydF9pbnZhbGlkX2VuY29kaW5nKEdldERhdGFiYXNlRW5jb2Rpbmco KSwgc3JjICsgY29uc3VtZWQsCisJCQkJCQkJCXNyY2xlbiAtIGNvbnN1bWVkKTsKKworCXJldHVy biByZXN1bHQ7CiB9CiAKIHN0YXRpYyBzaXplX3QKIHN0cmZvbGRfYnVpbHRpbihjaGFyICpkZXN0 LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAkJCQlw Z19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHVuaWNvZGVfc3RyZm9sZChkZXN0LCBkZXN0 c2l6ZSwgc3JjLCBzcmNsZW4sCi0JCQkJCQkgICBsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxs KTsKKwlzaXplX3QJCWNvbnN1bWVkOworCXNpemVfdAkJcmVzdWx0OworCisJcmVzdWx0ID0gdW5p Y29kZV9zdHJmb2xkKGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xlbiwgJmNvbnN1bWVkLAorCQkJ CQkJCSBsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwlpZiAoY29uc3VtZWQgPCBzcmNs ZW4pCisJCXJlcG9ydF9pbnZhbGlkX2VuY29kaW5nKEdldERhdGFiYXNlRW5jb2RpbmcoKSwgc3Jj ICsgY29uc3VtZWQsCisJCQkJCQkJCXNyY2xlbiAtIGNvbnN1bWVkKTsKKworCXJldHVybiByZXN1 bHQ7CiB9CiAKIHN0YXRpYyBib29sCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvY2Fz ZV90ZXN0LmMgYi9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMKaW5kZXggYTBkYmYwMGI2 NzEuLmFlMGY4NmZmYTBjIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0 LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2Nhc2VfdGVzdC5jCkBAIC0xMTUsNiArMTE1LDcg QEAgaWN1X3Rlc3RfZnVsbChjaGFyICpzdHIpCiAJY2hhcgkJaWN1X2ZvbGRbQlVGU1pdOwogCVVF cnJvckNvZGUJc3RhdHVzOwogCXNpemVfdAkJbGVuID0gc3RybGVuKHN0cik7CisJc2l6ZV90CQlj b25zdW1lZDsKIAogCS8qIGZ1bGwgY2FzZSBtYXBwaW5nIGRvZXNuJ3QgdXNlIHBvc2l4IHNlbWFu dGljcyAqLwogCXN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZSB3YnN0YXRlID0gewpAQCAtMTI2LDEw ICsxMjcsMTAgQEAgaWN1X3Rlc3RfZnVsbChjaGFyICpzdHIpCiAJCS5wcmV2X2FsbnVtID0gZmFs c2UsCiAJfTsKIAotCXVuaWNvZGVfc3RybG93ZXIobG93ZXIsIEJVRlNaLCBzdHIsIGxlbiwgdHJ1 ZSk7Ci0JdW5pY29kZV9zdHJ0aXRsZSh0aXRsZSwgQlVGU1osIHN0ciwgbGVuLCB0cnVlLCBpbml0 Y2FwX3dibmV4dCwgJndic3RhdGUpOwotCXVuaWNvZGVfc3RydXBwZXIodXBwZXIsIEJVRlNaLCBz dHIsIGxlbiwgdHJ1ZSk7Ci0JdW5pY29kZV9zdHJmb2xkKGZvbGQsIEJVRlNaLCBzdHIsIGxlbiwg dHJ1ZSk7CisJdW5pY29kZV9zdHJsb3dlcihsb3dlciwgQlVGU1osIHN0ciwgbGVuLCAmY29uc3Vt ZWQsIHRydWUpOworCXVuaWNvZGVfc3RydGl0bGUodGl0bGUsIEJVRlNaLCBzdHIsIGxlbiwgJmNv bnN1bWVkLCB0cnVlLCBpbml0Y2FwX3dibmV4dCwgJndic3RhdGUpOworCXVuaWNvZGVfc3RydXBw ZXIodXBwZXIsIEJVRlNaLCBzdHIsIGxlbiwgJmNvbnN1bWVkLCB0cnVlKTsKKwl1bmljb2RlX3N0 cmZvbGQoZm9sZCwgQlVGU1osIHN0ciwgbGVuLCAmY29uc3VtZWQsIHRydWUpOwogCXN0YXR1cyA9 IFVfWkVST19FUlJPUjsKIAl1Y2FzZW1hcF91dGY4VG9Mb3dlcihjYXNlbWFwLCBpY3VfbG93ZXIs IEJVRlNaLCBzdHIsIGxlbiwgJnN0YXR1cyk7CiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpAQCAt MjYwLDEzICsyNjEsMTYgQEAgc3RhdGljIHNpemVfdAogdGZ1bmNfbG93ZXIoY2hhciAqZHN0LCBz aXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCQkJc2l6ZV90IHNyY2xlbikKIHsKLQly ZXR1cm4gdW5pY29kZV9zdHJsb3dlcihkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCB0cnVlKTsK KwlzaXplX3QJCWNvbnN1bWVkOworCisJcmV0dXJuIHVuaWNvZGVfc3RybG93ZXIoZHN0LCBkc3Rz aXplLCBzcmMsIHNyY2xlbiwgJmNvbnN1bWVkLCB0cnVlKTsKIH0KIAogc3RhdGljIHNpemVfdAog dGZ1bmNfdGl0bGUoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAog CQkJc2l6ZV90IHNyY2xlbikKIHsKKwlzaXplX3QJCWNvbnN1bWVkOwogCXN0cnVjdCBXb3JkQm91 bmRhcnlTdGF0ZSB3YnN0YXRlID0gewogCQkuc3RyID0gc3JjLAogCQkubGVuID0gc3JjbGVuLApA QCAtMjc1LDI3ICsyNzksMzQgQEAgdGZ1bmNfdGl0bGUoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6 ZSwgY29uc3QgY2hhciAqc3JjLAogCQkucHJldl9hbG51bSA9IGZhbHNlLAogCX07CiAKLQlyZXR1 cm4gdW5pY29kZV9zdHJ0aXRsZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCB0cnVlLCBpbml0 Y2FwX3dibmV4dCwKLQkJCQkJCQkmd2JzdGF0ZSk7CisJcmV0dXJuIHVuaWNvZGVfc3RydGl0bGUo ZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgJmNvbnN1bWVkLCB0cnVlLAorCQkJCQkJCWluaXRj YXBfd2JuZXh0LCAmd2JzdGF0ZSk7CiB9CiAKIHN0YXRpYyBzaXplX3QKIHRmdW5jX3VwcGVyKGNo YXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJCXNpemVfdCBzcmNs ZW4pCiB7Ci0JcmV0dXJuIHVuaWNvZGVfc3RydXBwZXIoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xl biwgdHJ1ZSk7CisJc2l6ZV90CQljb25zdW1lZDsKKworCXJldHVybiB1bmljb2RlX3N0cnVwcGVy KGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sICZjb25zdW1lZCwgdHJ1ZSk7CiB9CiAKIHN0YXRp YyBzaXplX3QKIHRmdW5jX2ZvbGQoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hh ciAqc3JjLAogCQkgICBzaXplX3Qgc3JjbGVuKQogewotCXJldHVybiB1bmljb2RlX3N0cmZvbGQo ZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgdHJ1ZSk7CisJc2l6ZV90CQljb25zdW1lZDsKKwor CXJldHVybiB1bmljb2RlX3N0cmZvbGQoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgJmNvbnN1 bWVkLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQKIHRlc3RfY29udmVydF9jYXNlKHZvaWQpCiB7 CisJc2l6ZV90CQluZWVkZWQ7CisJc2l6ZV90CQljb25zdW1lZDsKKwogCS8qIHRlc3Qgc3RyaW5n IHdpdGggbm8gY2FzZSBjaGFuZ2VzICovCiAJdGVzdF9jb252ZXJ0KHRmdW5jX2xvd2VyLCAi4oia 4oieIiwgIuKImuKIniIpOwogCS8qIHRlc3QgYWRqdXN0LXRvLWNhc2VkIGJlaGF2aW9yICovCkBA IC0zMjAsNiArMzMxLDEwIEBAIHRlc3RfY29udmVydF9jYXNlKHZvaWQpCiAJLyogVStGRjExIEZV TExXSURUSCBPTkUgaXMgYWxwaGFudW1lcmljIGZvciBmdWxsIGNhc2UgbWFwcGluZyAqLwogCXRl c3RfY29udmVydCh0ZnVuY190aXRsZSwgIlx1RkYxMWEiLCAiXHVGRjExYSIpOwogCisJLyogaW52 YWxpZCBVVEY4ICovCisJbmVlZGVkID0gdW5pY29kZV9zdHJmb2xkKE5VTEwsIDAsICJhYmNceENF IiwgNCwgJmNvbnN1bWVkLCBmYWxzZSk7CisJQXNzZXJ0KGNvbnN1bWVkID09IDMpOworCUFzc2Vy dChuZWVkZWQgPT0gMyk7CiAKICNpZmRlZiBVU0VfSUNVCiAJaWN1X3Rlc3RfZnVsbCgiIik7CmRp ZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jIGIvc3JjL2NvbW1vbi91bmljb2Rl X2Nhc2UuYwppbmRleCA0MmViN2QyMjIxMS4uNzlmOGM3ZjE0YTcgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZV9jYXNlLmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYwpAQCAt NDAsOCArNDAsOCBAQCBzdGF0aWMgY29uc3QgY2hhcjMyX3QgKmNvbnN0IGNhc2VraW5kX21hcFtO Q2FzZUtpbmRdID0KIAogc3RhdGljIGNoYXIzMl90IGZpbmRfY2FzZV9tYXAoY2hhcjMyX3QgdWNz LCBjb25zdCBjaGFyMzJfdCAqbWFwKTsKIHN0YXRpYyBzaXplX3QgY29udmVydF9jYXNlKGNoYXIg KmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKLQkJ CQkJCSAgIENhc2VLaW5kIHN0cl9jYXNla2luZCwgYm9vbCBmdWxsLCBXb3JkQm91bmRhcnlOZXh0 IHdibmV4dCwKLQkJCQkJCSAgIHZvaWQgKndic3RhdGUpOworCQkJCQkJICAgc2l6ZV90ICpwY29u c3VtZWQsIENhc2VLaW5kIHN0cl9jYXNla2luZCwgYm9vbCBmdWxsLAorCQkJCQkJICAgV29yZEJv dW5kYXJ5TmV4dCB3Ym5leHQsIHZvaWQgKndic3RhdGUpOwogc3RhdGljIGVudW0gQ2FzZU1hcFJl c3VsdCBjYXNlbWFwKGNoYXIzMl90IHUxLCBDYXNlS2luZCBjYXNla2luZCwgYm9vbCBmdWxsLAog CQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IHNyY29mZiwK IAkJCQkJCQkJICBjaGFyMzJfdCAqc2ltcGxlLCBjb25zdCBjaGFyMzJfdCAqKnNwZWNpYWwpOwpA QCAtODIsNyArODIsOCBAQCB1bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShjaGFyMzJfdCBjb2RlKQog ICogdW5pY29kZV9zdHJsb3dlcigpCiAgKgogICogQ29udmVydCBzcmMgdG8gbG93ZXJjYXNlLCBh bmQgcmV0dXJuIHRoZSByZXN1bHQgbGVuZ3RoIChub3QgaW5jbHVkaW5nCi0gKiB0ZXJtaW5hdGlu ZyBOVUwpLgorICogdGVybWluYXRpbmcgTlVMKS4gU2V0cyAqcGNvbnN1bWVkIHRvIHRoZSBhbW91 bnQgb2Ygc3JjIHN1Y2Nlc3NmdWxseQorICogY29uc3VtZWQ7IGlmIGxlc3MgdGhhbiBzcmNsZW4s IGluZGljYXRlcyBhIGRlY29kaW5nIGVycm9yLgogICoKICAqIFN0cmluZyBzcmMgbXVzdCBiZSBl bmNvZGVkIGluIFVURi04LgogICoKQEAgLTk4LDE3ICs5OSwxOCBAQCB1bmljb2RlX2Nhc2Vmb2xk X3NpbXBsZShjaGFyMzJfdCBjb2RlKQogICovCiBzaXplX3QKIHVuaWNvZGVfc3RybG93ZXIoY2hh ciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAot CQkJCSBib29sIGZ1bGwpCisJCQkJIHNpemVfdCAqcGNvbnN1bWVkLCBib29sIGZ1bGwpCiB7Ci0J cmV0dXJuIGNvbnZlcnRfY2FzZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCBDYXNlTG93ZXIs IGZ1bGwsIE5VTEwsCi0JCQkJCQlOVUxMKTsKKwlyZXR1cm4gY29udmVydF9jYXNlKGRzdCwgZHN0 c2l6ZSwgc3JjLCBzcmNsZW4sIHBjb25zdW1lZCwgQ2FzZUxvd2VyLCBmdWxsLAorCQkJCQkJTlVM TCwgTlVMTCk7CiB9CiAKIC8qCiAgKiB1bmljb2RlX3N0cnRpdGxlKCkKICAqCiAgKiBDb252ZXJ0 IHNyYyB0byB0aXRsZWNhc2UsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBsZW5ndGggKG5vdCBpbmNs dWRpbmcKLSAqIHRlcm1pbmF0aW5nIE5VTCkuCisgKiB0ZXJtaW5hdGluZyBOVUwpLiBTZXRzICpw Y29uc3VtZWQgdG8gdGhlIGFtb3VudCBvZiBzcmMgc3VjY2Vzc2Z1bGx5CisgKiBjb25zdW1lZDsg aWYgbGVzcyB0aGFuIHNyY2xlbiwgaW5kaWNhdGVzIGEgZGVjb2RpbmcgZXJyb3IuCiAgKgogICog U3RyaW5nIHNyYyBtdXN0IGJlIGVuY29kZWQgaW4gVVRGLTguCiAgKgpAQCAtMTM0LDE3ICsxMzYs MTkgQEAgdW5pY29kZV9zdHJsb3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAgKi8KIHNpemVfdAogdW5pY29kZV9zdHJ0aXRsZShj aGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4s Ci0JCQkJIGJvb2wgZnVsbCwgV29yZEJvdW5kYXJ5TmV4dCB3Ym5leHQsIHZvaWQgKndic3RhdGUp CisJCQkJIHNpemVfdCAqcGNvbnN1bWVkLCBib29sIGZ1bGwsIFdvcmRCb3VuZGFyeU5leHQgd2Ju ZXh0LAorCQkJCSB2b2lkICp3YnN0YXRlKQogewotCXJldHVybiBjb252ZXJ0X2Nhc2UoZHN0LCBk c3RzaXplLCBzcmMsIHNyY2xlbiwgQ2FzZVRpdGxlLCBmdWxsLCB3Ym5leHQsCi0JCQkJCQl3YnN0 YXRlKTsKKwlyZXR1cm4gY29udmVydF9jYXNlKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIHBj b25zdW1lZCwgQ2FzZVRpdGxlLCBmdWxsLAorCQkJCQkJd2JuZXh0LCB3YnN0YXRlKTsKIH0KIAog LyoKICAqIHVuaWNvZGVfc3RydXBwZXIoKQogICoKICAqIENvbnZlcnQgc3JjIHRvIHVwcGVyY2Fz ZSwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGxlbmd0aCAobm90IGluY2x1ZGluZwotICogdGVybWlu YXRpbmcgTlVMKS4KKyAqIHRlcm1pbmF0aW5nIE5VTCkuIFNldHMgKnBjb25zdW1lZCB0byB0aGUg YW1vdW50IG9mIHNyYyBzdWNjZXNzZnVsbHkKKyAqIGNvbnN1bWVkOyBpZiBsZXNzIHRoYW4gc3Jj bGVuLCBpbmRpY2F0ZXMgYSBkZWNvZGluZyBlcnJvci4KICAqCiAgKiBTdHJpbmcgc3JjIG11c3Qg YmUgZW5jb2RlZCBpbiBVVEYtOC4KICAqCkBAIC0xNjAsMTcgKzE2NCwxOCBAQCB1bmljb2RlX3N0 cnRpdGxlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90 IHNyY2xlbiwKICAqLwogc2l6ZV90CiB1bmljb2RlX3N0cnVwcGVyKGNoYXIgKmRzdCwgc2l6ZV90 IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKLQkJCQkgYm9vbCBmdWxs KQorCQkJCSBzaXplX3QgKnBjb25zdW1lZCwgYm9vbCBmdWxsKQogewotCXJldHVybiBjb252ZXJ0 X2Nhc2UoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgQ2FzZVVwcGVyLCBmdWxsLCBOVUxMLAot CQkJCQkJTlVMTCk7CisJcmV0dXJuIGNvbnZlcnRfY2FzZShkc3QsIGRzdHNpemUsIHNyYywgc3Jj bGVuLCBwY29uc3VtZWQsIENhc2VVcHBlciwgZnVsbCwKKwkJCQkJCU5VTEwsIE5VTEwpOwogfQog CiAvKgogICogdW5pY29kZV9zdHJmb2xkKCkKICAqCiAgKiBDYXNlIGZvbGQgc3JjLCBhbmQgcmV0 dXJuIHRoZSByZXN1bHQgbGVuZ3RoIChub3QgaW5jbHVkaW5nIHRlcm1pbmF0aW5nCi0gKiBOVUwp LgorICogTlVMKS4gU2V0cyAqcGNvbnN1bWVkIHRvIHRoZSBhbW91bnQgb2Ygc3JjIHN1Y2Nlc3Nm dWxseSBjb25zdW1lZDsgaWYgbGVzcworICogdGhhbiBzcmNsZW4sIGluZGljYXRlcyBhIGRlY29k aW5nIGVycm9yLgogICoKICAqIFN0cmluZyBzcmMgbXVzdCBiZSBlbmNvZGVkIGluIFVURi04Lgog ICoKQEAgLTE4MywxMCArMTg4LDEwIEBAIHVuaWNvZGVfc3RydXBwZXIoY2hhciAqZHN0LCBzaXpl X3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogICovCiBzaXplX3QK IHVuaWNvZGVfc3RyZm9sZChjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpz cmMsIHNpemVfdCBzcmNsZW4sCi0JCQkJYm9vbCBmdWxsKQorCQkJCXNpemVfdCAqcGNvbnN1bWVk LCBib29sIGZ1bGwpCiB7Ci0JcmV0dXJuIGNvbnZlcnRfY2FzZShkc3QsIGRzdHNpemUsIHNyYywg c3JjbGVuLCBDYXNlRm9sZCwgZnVsbCwgTlVMTCwKLQkJCQkJCU5VTEwpOworCXJldHVybiBjb252 ZXJ0X2Nhc2UoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgcGNvbnN1bWVkLCBDYXNlRm9sZCwg ZnVsbCwKKwkJCQkJCU5VTEwsIE5VTEwpOwogfQogCiAvKiBsb2NhbCB2ZXJzaW9uIG9mIHBnX3V0 Zl9tYmxlbigpIHRvIGJlIGlubGluYWJsZSAqLwpAQCAtMjIzLDggKzIyOCw4IEBAIHV0ZjhfbWJs ZW4oY29uc3QgdW5zaWduZWQgY2hhciAqcykKICAqLwogc3RhdGljIHNpemVfdAogY29udmVydF9j YXNlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNy Y2xlbiwKLQkJCSBDYXNlS2luZCBzdHJfY2FzZWtpbmQsIGJvb2wgZnVsbCwgV29yZEJvdW5kYXJ5 TmV4dCB3Ym5leHQsCi0JCQkgdm9pZCAqd2JzdGF0ZSkKKwkJCSBzaXplX3QgKnBjb25zdW1lZCwg Q2FzZUtpbmQgc3RyX2Nhc2VraW5kLCBib29sIGZ1bGwsCisJCQkgV29yZEJvdW5kYXJ5TmV4dCB3 Ym5leHQsIHZvaWQgKndic3RhdGUpCiB7CiAJLyogY2hhcmFjdGVyIENhc2VLaW5kIHZhcmllcyB3 aGlsZSB0aXRsZWNhc2luZyAqLwogCUNhc2VLaW5kCWNocl9jYXNla2luZCA9IHN0cl9jYXNla2lu ZDsKQEAgLTMxNSw2ICszMjAsNyBAQCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0 c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCWlmIChyZXN1bHRfbGVuIDwg ZHN0c2l6ZSkKIAkJZHN0W3Jlc3VsdF9sZW5dID0gJ1wwJzsKIAorCSpwY29uc3VtZWQgPSBzcmNv ZmY7CiAJcmV0dXJuIHJlc3VsdF9sZW47CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1vbi91bmljb2RlX2Nhc2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2UuaApp bmRleCAwM2FkZDc4Y2FiZS4uMWNiYzBjMTRiYzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nv bW1vbi91bmljb2RlX2Nhc2UuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXNl LmgKQEAgLTIxLDEzICsyMSwxMyBAQCBjaGFyMzJfdAl1bmljb2RlX3RpdGxlY2FzZV9zaW1wbGUo Y2hhcjMyX3QgY29kZSk7CiBjaGFyMzJfdAl1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUoY2hhcjMy X3QgY29kZSk7CiBjaGFyMzJfdAl1bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShjaGFyMzJfdCBjb2Rl KTsKIHNpemVfdAkJdW5pY29kZV9zdHJsb3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBj b25zdCBjaGFyICpzcmMsCi0JCQkJCQkJIHNpemVfdCBzcmNsZW4sIGJvb2wgZnVsbCk7CisJCQkJ CQkJIHNpemVfdCBzcmNsZW4sIHNpemVfdCAqcGNvbnN1bWVkLCBib29sIGZ1bGwpOwogc2l6ZV90 CQl1bmljb2RlX3N0cnRpdGxlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIg KnNyYywKLQkJCQkJCQkgc2l6ZV90IHNyY2xlbiwgYm9vbCBmdWxsLAorCQkJCQkJCSBzaXplX3Qg c3JjbGVuLCBzaXplX3QgKnBjb25zdW1lZCwgYm9vbCBmdWxsLAogCQkJCQkJCSBXb3JkQm91bmRh cnlOZXh0IHdibmV4dCwgdm9pZCAqd2JzdGF0ZSk7CiBzaXplX3QJCXVuaWNvZGVfc3RydXBwZXIo Y2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJCSBzaXpl X3Qgc3JjbGVuLCBib29sIGZ1bGwpOworCQkJCQkJCSBzaXplX3Qgc3JjbGVuLCBzaXplX3QgKnBj b25zdW1lZCwgYm9vbCBmdWxsKTsKIHNpemVfdAkJdW5pY29kZV9zdHJmb2xkKGNoYXIgKmRzdCwg c2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCQlzaXplX3Qgc3JjbGVuLCBi b29sIGZ1bGwpOworCQkJCQkJCXNpemVfdCBzcmNsZW4sIHNpemVfdCAqcGNvbnN1bWVkLCBib29s IGZ1bGwpOwogCiAjZW5kaWYJCQkJCQkJLyogVU5JQ09ERV9DQVNFX0ggKi8KLS0gCjIuNDMuMAoK --=-3wI5cyGmcXXi5ET9/z75 Content-Disposition: attachment; filename*0=v4-0003-Validating-iterator-friendly-UTF8-encoder-decoder.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0003-Validating-iterator-friendly-UTF8-encoder-decoder.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzZWYxNWJlNGEyYWQ4ZTk5ZDlmOGI2ZDc1N2MxNzA0NDE2NmM1YjhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDQgSnVuIDIwMjYgMTI6MDg6NTEgLTA3MDAKU3ViamVjdDogW1BBVENIIHY0IDMvNF0gVmFs aWRhdGluZywgaXRlcmF0b3ItZnJpZW5kbHkgVVRGOCBlbmNvZGVyL2RlY29kZXIKIEFQSS4KClJl dmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2MzNTUzNTRlNmMzZjRhN2FhZmIwNDczNjFiNzNkYjI0NzI2MGZj YTAuY2FtZWxAai1kYXZpcy5jb20KLS0tCiBzcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oIHwgMTYw ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwg MTU4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbWIvcGdfd2NoYXIuaCBiL3NyYy9pbmNsdWRlL21iL3BnX3djaGFyLmgKaW5kZXggZGVlZTJh ODMyYzMuLmQ4ZWE3N2MzZmUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5o CisrKyBiL3NyYy9pbmNsdWRlL21iL3BnX3djaGFyLmgKQEAgLTI3LDYgKzI3LDExIEBACiAgKi8K IHR5cGVkZWYgdW5zaWduZWQgaW50IHBnX3djaGFyOwogCisvKgorICogUmV0dXJuZWQgZm9yIGRl Y29kaW5nIGZhaWx1cmVzIGluIHV0ZjhkZWNvZGUoKSBhbmQgdXRmOF90b191bmljb2RlKCkuCisg Ki8KKyNkZWZpbmUgUEdfSU5WQUxJRF9DT0RFUE9JTlQJMHhGRkZGRkZGRgorCiAvKgogICogTWF4 aW11bSBieXRlIGxlbmd0aCBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBhbnkgYmFja2VuZCBl bmNvZGluZwogICovCkBAIC0zOTIsMTEgKzM5NywxNjEgQEAgc3Vycm9nYXRlX3BhaXJfdG9fY29k ZXBvaW50KGNoYXIxNl90IGZpcnN0LCBjaGFyMTZfdCBzZWNvbmQpCiAJcmV0dXJuICgoZmlyc3Qg JiAweDNGRikgPDwgMTApICsgMHgxMDAwMCArIChzZWNvbmQgJiAweDNGRik7CiB9CiAKKy8qCisg KiBFbmNvZGUgdGhlIGNvZGVwb2ludCBhcyBVVEY4IGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBi eXRlcyByZXF1aXJlZC4gSWYKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZXhjZWVk cyBkc3RzaXplLCBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mCisgKiBieXRlcyByZXF1aXJlZCB3 aXRob3V0IG1vZGlmeWluZyBkc3QuIElmIGRzdHNpemUgaXMgemVybywgZHN0IG1heSBiZQorICog TlVMTC4gSWYgY29kZXBvaW50IGlzIG5vdCBhIHZhbGlkIFVuaWNvZGUgU2NhbGFyLCByZXR1cm4g LTEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1dGY4ZW5jb2RlKHVuc2lnbmVkIGNoYXIgKmRz dCwgc2l6ZV90IGRzdHNpemUsIGNoYXIzMl90IGNvZGVwb2ludCkKK3sKKwlpbnQJCQluYnl0ZXM7 CisKKwlpZiAoY29kZXBvaW50IDw9IDB4N0YpCisJCW5ieXRlcyA9IDE7CisJZWxzZSBpZiAoY29k ZXBvaW50IDw9IDB4N0ZGKQorCQluYnl0ZXMgPSAyOworCWVsc2UgaWYgKGNvZGVwb2ludCA8PSAw eEZGRkYpCisJeworCQkvKiBzdXJyb2dhdGUgaGFsdmVzIG5vdCB2YWxpZCBmb3IgVVRGOCAqLwor CQlpZiAoY29kZXBvaW50ID49IDB4RDgwMCAmJiBjb2RlcG9pbnQgPD0gMHhERkZGKQorCQkJcmV0 dXJuIC0xOworCQluYnl0ZXMgPSAzOworCX0KKwllbHNlIGlmIChjb2RlcG9pbnQgPD0gMHgxMEZG RkYpCisJCW5ieXRlcyA9IDQ7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAobmJ5dGVzID4g ZHN0c2l6ZSkKKwkJcmV0dXJuIG5ieXRlczsKKworCWlmIChjb2RlcG9pbnQgPD0gMHg3RikKKwl7 CisJCWRzdFswXSA9IGNvZGVwb2ludDsKKwl9CisJZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4N0ZG KQorCXsKKwkJZHN0WzBdID0gMHhDMCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgxRik7CisJCWRz dFsxXSA9IDB4ODAgfCAoY29kZXBvaW50ICYgMHgzRik7CisJfQorCWVsc2UgaWYgKGNvZGVwb2lu dCA8PSAweEZGRkYpCisJeworCQlkc3RbMF0gPSAweEUwIHwgKChjb2RlcG9pbnQgPj4gMTIpICYg MHgwRik7CisJCWRzdFsxXSA9IDB4ODAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4M0YpOworCQlk c3RbMl0gPSAweDgwIHwgKGNvZGVwb2ludCAmIDB4M0YpOworCX0KKwllbHNlIGlmIChjb2RlcG9p bnQgPD0gMHgxMEZGRkYpCisJeworCQlkc3RbMF0gPSAweEYwIHwgKChjb2RlcG9pbnQgPj4gMTgp ICYgMHgwNyk7CisJCWRzdFsxXSA9IDB4ODAgfCAoKGNvZGVwb2ludCA+PiAxMikgJiAweDNGKTsK KwkJZHN0WzJdID0gMHg4MCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgzRik7CisJCWRzdFszXSA9 IDB4ODAgfCAoY29kZXBvaW50ICYgMHgzRik7CisJfQorCisJcmV0dXJuIG5ieXRlczsKK30KKwor LyoKKyAqIERlY29kZSB0aGUgbmV4dCBVbmljb2RlIGNvZGVwb2ludCBmcm9tIFVURjggYXQgc3Jj LCByZWFkaW5nIG5vIG1vcmUgdGhhbgorICogc3JjbGVuIGJ5dGVzICh3aGljaCBtdXN0IGJlIGF0 IGxlYXN0IDEpLiBPbiBzdWNjZXNzLCAqcGNvZGVwb2ludCB3aWxsIGJlIGEKKyAqIHZhbGlkIFVu aWNvZGUgU2NhbGFyOyBvdGhlcndpc2UgaXQgd2lsbCBiZSBzZXQgdG8gUEdfSU5WQUxJRF9DT0RF UE9JTlQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkLiBJZiBz cmNsZW4gaXMgbm90IGxhcmdlIGVub3VnaAorICogKGkuZS4gc3JjIGlzIHRydW5jYXRlZCBpbiB0 aGUgbWlkZGxlIG9mIGEgc2VxdWVuY2UpLCByZXR1cm5zIDAuIElmIGludmFsaWQsCisgKiByZXR1 cm5zIC0xLgorICovCitzdGF0aWMgaW5saW5lIGludAordXRmOGRlY29kZShjaGFyMzJfdCAqcGNv ZGVwb2ludCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuKQoreworCWlu dAkJCW5ieXRlczsKKwljaGFyMzJfdAljb2RlcG9pbnQ7CisKKwlBc3NlcnQoc3JjbGVuID49IDEp OworCisJaWYgKCgqc3JjICYgMHg4MCkgPT0gMCkKKwl7CisJCSpwY29kZXBvaW50ID0gKGNoYXIz Ml90KSBzcmNbMF07CisJCXJldHVybiAxOworCX0KKworCWlmICgoKnNyYyAmIDB4ZTApID09IDB4 YzApCisJCW5ieXRlcyA9IDI7CisJZWxzZSBpZiAoKCpzcmMgJiAweGYwKSA9PSAweGUwKQorCQlu Ynl0ZXMgPSAzOworCWVsc2UgaWYgKCgqc3JjICYgMHhmOCkgPT0gMHhmMCkKKwkJbmJ5dGVzID0g NDsKKwllbHNlCisJCWdvdG8gaW52YWxpZDsKKworCS8qIHRydW5jYXRlZCAqLworCWlmIChzcmNs ZW4gPCBuYnl0ZXMpCisJeworCQkqcGNvZGVwb2ludCA9IFBHX0lOVkFMSURfQ09ERVBPSU5UOwor CQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobmJ5dGVzID09IDIpCisJeworCQkvKiBjaGVjayBjb250 aW51YXRpb24gYnl0ZSAqLworCQlpZiAoKHNyY1sxXSAmIDB4YzApICE9IDB4ODApCisJCQlnb3Rv IGludmFsaWQ7CisKKwkJY29kZXBvaW50ID0gKGNoYXIzMl90KSAoKChzcmNbMF0gJiAweDFmKSA8 PCA2KSB8CisJCQkJCQkJCShzcmNbMV0gJiAweDNmKSk7CisKKwkJLyogb3ZlcmxvbmcgKi8KKwkJ aWYgKGNvZGVwb2ludCA8IDB4MDA4MCkKKwkJCWdvdG8gaW52YWxpZDsKKwl9CisJZWxzZSBpZiAo bmJ5dGVzID09IDMpCisJeworCQkvKiBjaGVjayBjb250aW51YXRpb24gYnl0ZXMgKi8KKwkJaWYg KChzcmNbMV0gJiAweGMwKSAhPSAweDgwIHx8IChzcmNbMl0gJiAweGMwKSAhPSAweDgwKQorCQkJ Z290byBpbnZhbGlkOworCisJCWNvZGVwb2ludCA9IChjaGFyMzJfdCkgKCgoc3JjWzBdICYgMHgw ZikgPDwgMTIpIHwKKwkJCQkJCQkJKChzcmNbMV0gJiAweDNmKSA8PCA2KSB8CisJCQkJCQkJCShz cmNbMl0gJiAweDNmKSk7CisKKwkJLyogb3Zlcmxvbmcgb3Igc3Vycm9nYXRlIGhhbGYgKi8KKwkJ aWYgKGNvZGVwb2ludCA8IDB4MDgwMCB8fAorCQkJKGNvZGVwb2ludCA+PSAweEQ4MDAgJiYgY29k ZXBvaW50IDw9IDB4REZGRikpCisJCQlnb3RvIGludmFsaWQ7CisJfQorCWVsc2UgaWYgKG5ieXRl cyA9PSA0KQorCXsKKwkJLyogY2hlY2sgY29udGludWF0aW9uIGJ5dGVzICovCisJCWlmICgoc3Jj WzFdICYgMHhjMCkgIT0gMHg4MCB8fCAoc3JjWzJdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkJKHNy Y1szXSAmIDB4YzApICE9IDB4ODApCisJCQlnb3RvIGludmFsaWQ7CisKKwkJY29kZXBvaW50ID0g KGNoYXIzMl90KSAoKChzcmNbMF0gJiAweDA3KSA8PCAxOCkgfAorCQkJCQkJCQkoKHNyY1sxXSAm IDB4M2YpIDw8IDEyKSB8CisJCQkJCQkJCSgoc3JjWzJdICYgMHgzZikgPDwgNikgfAorCQkJCQkJ CQkoc3JjWzNdICYgMHgzZikpOworCisJCS8qIG92ZXJsb25nIG9yIG91dC1vZi1yYW5nZSAqLwor CQlpZiAoY29kZXBvaW50IDwgMHgxMDAwMCB8fCBjb2RlcG9pbnQgPiAweDEwRkZGRikKKwkJCWdv dG8gaW52YWxpZDsKKwl9CisKKwkqcGNvZGVwb2ludCA9IGNvZGVwb2ludDsKKwlyZXR1cm4gbmJ5 dGVzOworCitpbnZhbGlkOgorCSpwY29kZXBvaW50ID0gUEdfSU5WQUxJRF9DT0RFUE9JTlQ7CisJ cmV0dXJuIC0xOworfQorCiAvKgogICogQ29udmVydCBhIFVURi04IGNoYXJhY3RlciB0byBhIFVu aWNvZGUgY29kZSBwb2ludC4KICAqIFRoaXMgaXMgYSBvbmUtY2hhcmFjdGVyIHZlcnNpb24gb2Yg cGdfdXRmMndjaGFyX3dpdGhfbGVuLgogICoKICAqIE5vIGVycm9yIGNoZWNrcyBoZXJlLCBjIG11 c3QgcG9pbnQgdG8gYSBsb25nLWVub3VnaCBzdHJpbmcuCisgKgorICogWFhYOiBDYWxsZXJzIHNo b3VsZCBjb25zaWRlciB1dGY4ZGVjb2RlKCkgaW5zdGVhZC4KICAqLwogc3RhdGljIGlubGluZSBj aGFyMzJfdAogdXRmOF90b191bmljb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMpCkBAIC00MTYs MTMgKzU3MSwxNCBAQCB1dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqYykKIAkJ CQkJCSAgICgoY1syXSAmIDB4M2YpIDw8IDYpIHwKIAkJCQkJCSAgIChjWzNdICYgMHgzZikpOwog CWVsc2UKLQkJLyogdGhhdCBpcyBhbiBpbnZhbGlkIGNvZGUgb24gcHVycG9zZSAqLwotCQlyZXR1 cm4gMHhmZmZmZmZmZjsKKwkJcmV0dXJuIFBHX0lOVkFMSURfQ09ERVBPSU5UOwogfQogCiAvKgog ICogTWFwIGEgVW5pY29kZSBjb2RlIHBvaW50IHRvIFVURi04LiAgdXRmOHN0cmluZyBtdXN0IGhh dmUgYXQgbGVhc3QKICAqIHVuaWNvZGVfdXRmOGxlbihjKSBieXRlcyBhdmFpbGFibGUuCisgKgor ICogWFhYOiBDYWxsZXJzIHNob3VsZCBjb25zaWRlciB1dGY4ZW5jb2RlKCkgaW5zdGVhZC4KICAq Lwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKIHVuaWNvZGVfdG9fdXRmOChjaGFyMzJf dCBjLCB1bnNpZ25lZCBjaGFyICp1dGY4c3RyaW5nKQotLSAKMi40My4wCgo= --=-3wI5cyGmcXXi5ET9/z75 Content-Disposition: attachment; filename*0=v4-0004-unicode_case.c-use-new-utf8encode-utf8decode-APIs.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0004-unicode_case.c-use-new-utf8encode-utf8decode-APIs.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzYjdlYmUyMWIxZGY4OTc1Nzk4MzI2OTBlYWVjZjljZjEwNDEzMjhmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDE5IEp1biAyMDI2IDE0OjU4OjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NCA0LzRdIHVu aWNvZGVfY2FzZS5jOiB1c2UgbmV3IHV0ZjhlbmNvZGUvdXRmOGRlY29kZSBBUElzLgoKUmV2aWV3 ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vYzM1NTM1NGU2YzNmNGE3YWFmYjA0NzM2MWI3M2RiMjQ3MjYwZmNhMC5j YW1lbEBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jIHwgMTAgKystLQogc3JjL2NvbW1vbi91bmljb2RlL2Nhc2VfdGVzdC5jICAgICAgICAg ICAgfCAgMiArLQogc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYyAgICAgICAgICAgICAgICAgfCA3 MiArKysrKysrKysrKystLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25z KCspLCA0MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jCmluZGV4IDU2MTlkYWY0M2MzLi42MzUxNmU3MTc0ZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAgLTYyLDIyICs2MiwyMiBAQCBpbml0Y2FwX3di bmV4dCh2b2lkICpzdGF0ZSkKIAogCXdoaWxlICh3YnN0YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5s ZW4pCiAJewotCQlpbnQJCQl1bGVuID0gcGdfdXRmX21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFy ICopIHdic3RhdGUtPnN0ciArCi0JCQkJCQkJCQkJd2JzdGF0ZS0+b2Zmc2V0KTsKKwkJaW50CQkJ dWxlbjsKIAkJY2hhcjMyX3QJdTsKIAkJYm9vbAkJY3Vycl9hbG51bTsKIAkJc2l6ZV90CQlwcmV2 X29mZnNldCA9IHdic3RhdGUtPm9mZnNldDsKIAorCQl1bGVuID0gdXRmOGRlY29kZSgmdSwgKGNv bnN0IHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyICsgd2JzdGF0ZS0+b2Zmc2V0LAorCQkJ CQkJICB3YnN0YXRlLT5sZW4gLSB3YnN0YXRlLT5vZmZzZXQpOworCiAJCS8qIGludmFsaWQgVVRG OCAqLwotCQlpZiAod2JzdGF0ZS0+b2Zmc2V0ICsgdWxlbiA+IHdic3RhdGUtPmxlbikKKwkJaWYg KHVsZW4gPD0gMCkKIAkJewogCQkJd2JzdGF0ZS0+aW5pdCA9IHRydWU7CiAJCQl3YnN0YXRlLT5v ZmZzZXQgPSB3YnN0YXRlLT5sZW47CiAJCQlyZXR1cm4gcHJldl9vZmZzZXQ7CiAJCX0KIAotCQl1 ID0gdXRmOF90b191bmljb2RlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciAr Ci0JCQkJCQkJd2JzdGF0ZS0+b2Zmc2V0KTsKIAkJY3Vycl9hbG51bSA9IHBnX3VfaXNhbG51bSh1 LCB3YnN0YXRlLT5wb3NpeCk7CiAKIAkJaWYgKCF3YnN0YXRlLT5pbml0IHx8IGN1cnJfYWxudW0g IT0gd2JzdGF0ZS0+cHJldl9hbG51bSkKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vdW5pY29kZS9j YXNlX3Rlc3QuYyBiL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYwppbmRleCBhZTBmODZm ZmEwYy4uNzFhNmYyYmJlNzAgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rl c3QuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMKQEAgLTE3OSw3ICsxNzks NyBAQCB0ZXN0X2ljdSh2b2lkKQogCXsKIAkJcGdfdW5pY29kZV9jYXRlZ29yeSBjYXRlZ29yeSA9 IHVuaWNvZGVfY2F0ZWdvcnkoY29kZSk7CiAKLQkJaWYgKGNhdGVnb3J5ICE9IFBHX1VfVU5BU1NJ R05FRCkKKwkJaWYgKGNhdGVnb3J5ICE9IFBHX1VfVU5BU1NJR05FRCAmJiBjYXRlZ29yeSAhPSBQ R19VX1NVUlJPR0FURSkKIAkJewogCQkJdWludDhfdAkJaWN1X2NhdGVnb3J5ID0gdV9jaGFyVHlw ZShjb2RlKTsKIAkJCWNoYXIJCWNvZGVfc3RyWzVdID0gezB9OwpkaWZmIC0tZ2l0IGEvc3JjL2Nv bW1vbi91bmljb2RlX2Nhc2UuYyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKaW5kZXggNzlm OGM3ZjE0YTcuLjI2ODMzY2YwYzUzIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGVfY2Fz ZS5jCisrKyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKQEAgLTE5NCwyMiArMTk0LDYgQEAg dW5pY29kZV9zdHJmb2xkKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNy Yywgc2l6ZV90IHNyY2xlbiwKIAkJCQkJCU5VTEwsIE5VTEwpOwogfQogCi0vKiBsb2NhbCB2ZXJz aW9uIG9mIHBnX3V0Zl9tYmxlbigpIHRvIGJlIGlubGluYWJsZSAqLwotc3RhdGljIGludAotdXRm OF9tYmxlbihjb25zdCB1bnNpZ25lZCBjaGFyICpzKQotewotCWlmICgoKnMgJiAweDgwKSA9PSAw KQotCQlyZXR1cm4gMTsKLQllbHNlIGlmICgoKnMgJiAweGUwKSA9PSAweGMwKQotCQlyZXR1cm4g MjsKLQllbHNlIGlmICgoKnMgJiAweGYwKSA9PSAweGUwKQotCQlyZXR1cm4gMzsKLQllbHNlIGlm ICgoKnMgJiAweGY4KSA9PSAweGYwKQotCQlyZXR1cm4gNDsKLQllbHNlCi0JCXJldHVybiAtMTsK LX0KLQogLyoKICAqIEltcGxlbWVudCBVbmljb2RlIERlZmF1bHQgQ2FzZSBDb252ZXJzaW9uIGFs Z29yaXRobS4KICAqCkBAIC0yNDgsMTggKzIzMiwxOSBAQCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0 LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCiAJd2hp bGUgKHNyY29mZiA8IHNyY2xlbikKIAl7Ci0JCWludAkJCXUxbGVuID0gdXRmOF9tYmxlbigoY29u c3QgdW5zaWduZWQgY2hhciAqKSBzcmMgKyBzcmNvZmYpOwogCQljaGFyMzJfdAl1MTsKKwkJaW50 CQkJdTFsZW47CiAJCWNoYXIzMl90CXNpbXBsZSA9IDA7CiAJCWNvbnN0IGNoYXIzMl90ICpzcGVj aWFsID0gTlVMTDsKIAkJZW51bSBDYXNlTWFwUmVzdWx0IGNhc2VtYXBfcmVzdWx0OwogCisJCXUx bGVuID0gdXRmOGRlY29kZSgmdTEsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNyYyArIHNyY29m ZiwKKwkJCQkJCSAgIHNyY2xlbiAtIHNyY29mZik7CisKIAkJLyogaW52YWxpZCBVVEY4ICovCi0J CWlmICh1MWxlbiA8IDAgfHwgc3Jjb2ZmICsgdTFsZW4gPiBzcmNsZW4pCisJCWlmICh1MWxlbiA8 PSAwKQogCQkJYnJlYWs7CiAKLQkJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVk IGNoYXIgKikgc3JjICsgc3Jjb2ZmKTsKLQogCQlpZiAoc3RyX2Nhc2VraW5kID09IENhc2VUaXRs ZSkKIAkJewogCQkJaWYgKHNyY29mZiA9PSBib3VuZGFyeSkKQEAgLTI4MCw2ICsyNjUsNyBAQCBj b252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBz aXplX3Qgc3JjbGVuLAogCQkJCS8qIG5vIG1hcHBpbmc7IGNvcHkgYnl0ZXMgZnJvbSBzcmMgKi8K IAkJCQlBc3NlcnQoc2ltcGxlID09IDApOwogCQkJCUFzc2VydChzcGVjaWFsID09IE5VTEwpOwor CiAJCQkJaWYgKHJlc3VsdF9sZW4gKyB1MWxlbiA8PSBkc3RzaXplKQogCQkJCQltZW1jcHkoZHN0 ICsgcmVzdWx0X2xlbiwgc3JjICsgc3Jjb2ZmLCB1MWxlbik7CiAKQEAgLTI4OSwxMSArMjc1LDE5 IEBAIGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpz cmMsIHNpemVfdCBzcmNsZW4sCiAJCQkJewogCQkJCQkvKiByZXBsYWNlIHdpdGggc2luZ2xlIGNo YXJhY3RlciAqLwogCQkJCQljaGFyMzJfdAl1MiA9IHNpbXBsZTsKLQkJCQkJY2hhcjMyX3QJdTJs ZW4gPSB1bmljb2RlX3V0ZjhsZW4odTIpOworCQkJCQlpbnQJCQl1MmxlbjsKKwkJCQkJc2l6ZV90 CQlyZW1haW5pbmcgPSAwOworCQkJCQl1bnNpZ25lZCBjaGFyICpwID0gTlVMTDsKKworCQkJCQlp ZiAoZHN0c2l6ZSA+IHJlc3VsdF9sZW4pCisJCQkJCXsKKwkJCQkJCXJlbWFpbmluZyA9IGRzdHNp emUgLSByZXN1bHRfbGVuOworCQkJCQkJcCA9ICh1bnNpZ25lZCBjaGFyICopIGRzdCArIHJlc3Vs dF9sZW47CisJCQkJCX0KIAogCQkJCQlBc3NlcnQoc3BlY2lhbCA9PSBOVUxMKTsKLQkJCQkJaWYg KHJlc3VsdF9sZW4gKyB1MmxlbiA8PSBkc3RzaXplKQotCQkJCQkJdW5pY29kZV90b191dGY4KHUy LCAodW5zaWduZWQgY2hhciAqKSBkc3QgKyByZXN1bHRfbGVuKTsKKwkJCQkJdTJsZW4gPSB1dGY4 ZW5jb2RlKHAsIHJlbWFpbmluZywgdTIpOworCQkJCQlBc3NlcnQodTJsZW4gPiAwKTsKIAogCQkJ CQlyZXN1bHRfbGVuICs9IHUybGVuOwogCQkJCX0KQEAgLTMwNCwxMCArMjk4LDE4IEBAIGNvbnZl cnRfY2FzZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVf dCBzcmNsZW4sCiAJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfQ0FTRV9FWFBBTlNJT04gJiYg c3BlY2lhbFtpXTsgaSsrKQogCQkJCXsKIAkJCQkJY2hhcjMyX3QJdTIgPSBzcGVjaWFsW2ldOwot CQkJCQlzaXplX3QJCXUybGVuID0gdW5pY29kZV91dGY4bGVuKHUyKTsKKwkJCQkJaW50CQkJdTJs ZW47CisJCQkJCXNpemVfdAkJcmVtYWluaW5nID0gMDsKKwkJCQkJdW5zaWduZWQgY2hhciAqcCA9 IE5VTEw7CisKKwkJCQkJaWYgKGRzdHNpemUgPiByZXN1bHRfbGVuKQorCQkJCQl7CisJCQkJCQly ZW1haW5pbmcgPSBkc3RzaXplIC0gcmVzdWx0X2xlbjsKKwkJCQkJCXAgPSAodW5zaWduZWQgY2hh ciAqKSBkc3QgKyByZXN1bHRfbGVuOworCQkJCQl9CiAKLQkJCQkJaWYgKHJlc3VsdF9sZW4gKyB1 MmxlbiA8PSBkc3RzaXplKQotCQkJCQkJdW5pY29kZV90b191dGY4KHUyLCAodW5zaWduZWQgY2hh ciAqKSBkc3QgKyByZXN1bHRfbGVuKTsKKwkJCQkJdTJsZW4gPSB1dGY4ZW5jb2RlKHAsIHJlbWFp bmluZywgdTIpOworCQkJCQlBc3NlcnQodTJsZW4gPiAwKTsKIAogCQkJCQlyZXN1bHRfbGVuICs9 IHUybGVuOwogCQkJCX0KQEAgLTM0NCwxNSArMzQ2LDE1IEBAIGNoZWNrX2ZpbmFsX3NpZ21hKGNv bnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCkKIAl7CiAJ CWlmICgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAoc3RyW2ldICYgMHhDMCkgPT0gMHhDMCkKIAkJ ewotCQkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0 ciArIGkpOworCQkJaW50CQkJdTFsZW47CiAJCQljaGFyMzJfdAljdXJyOwogCisJCQl1MWxlbiA9 IHV0ZjhkZWNvZGUoJmN1cnIsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIGksIGxlbiAt IGkpOworCiAJCQkvKiBpbnZhbGlkIFVURjggKi8KLQkJCWlmICh1MWxlbiA8IDAgfHwgaSArIHUx bGVuID4gbGVuKQorCQkJaWYgKHUxbGVuIDw9IDApCiAJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQlj dXJyID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOwotCiAJCQlpZiAocGdfdV9wcm9wX2Nhc2Vf aWdub3JhYmxlKGN1cnIpKQogCQkJCWNvbnRpbnVlOwogCQkJZWxzZSBpZiAocGdfdV9wcm9wX2Nh c2VkKGN1cnIpKQpAQCAtMzcxLDE5ICszNzMsMTkgQEAgY2hlY2tfZmluYWxfc2lnbWEoY29uc3Qg dW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0KQogCQlyZXR1cm4g dHJ1ZTsKIAogCS8qIGl0ZXJhdGUgZm9yd2FyZHMsIGxvb2tpbmcgZm9yIENhc2VkIGNoYXJhY3Rl ciAqLwotCWZvciAoaW50IGkgPSBvZmZzZXQgKyAxOyBpIDwgbGVuICYmIHN0cltpXSAhPSAnXDAn OyBpKyspCisJZm9yIChpbnQgaSA9IG9mZnNldCArIDE7IGkgPCBsZW47IGkrKykKIAl7CiAJCWlm ICgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAoc3RyW2ldICYgMHhDMCkgPT0gMHhDMCkKIAkJewot CQkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciAr IGkpOworCQkJaW50CQkJdTFsZW47CiAJCQljaGFyMzJfdAljdXJyOwogCisJCQl1MWxlbiA9IHV0 ZjhkZWNvZGUoJmN1cnIsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIGksIGxlbiAtIGkp OworCiAJCQkvKiBpbnZhbGlkIFVURjggKi8KLQkJCWlmICh1MWxlbiA8IDAgfHwgaSArIHUxbGVu ID4gbGVuKQorCQkJaWYgKHUxbGVuIDw9IDApCiAJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQljdXJy ID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOwotCiAJCQlpZiAocGdfdV9wcm9wX2Nhc2VfaWdu b3JhYmxlKGN1cnIpKQogCQkJCWNvbnRpbnVlOwogCQkJZWxzZSBpZiAocGdfdV9wcm9wX2Nhc2Vk KGN1cnIpKQotLSAKMi40My4wCgo= --=-3wI5cyGmcXXi5ET9/z75--