From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com [IPv6:2a00:1450:4864:20::531]) by sourceware.org (Postfix) with ESMTPS id 017C93857B86; Wed, 31 Aug 2022 04:38:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 017C93857B86 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x531.google.com with SMTP id w2so1286057edc.0; Tue, 30 Aug 2022 21:38:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc; bh=ZIBOvjv/Xin5v5X6LkS6/lb1LtcfHMRRcbIiBMW4c2k=; b=DsMlXhqdlVdQsE3Gh/CnkVEmpwAaC+cjJ7E+pmeyZzWKsPdIfruFFkN/94yrLpmoFj 3sENKQWjlbMfnit99DG94laDLUUL91RpUlZ9Zx6RjbOjMYfNulkqSVxUvUW3xGuk8TwN 9y8ACN+WWe7X9azfnCqpCvvFS5BX4Az7uVl8rP0l9FiiimTihptCQPGVUI13jokEve6v 9yzIXeTR08B/KviWBejTjtV5E5cvKhg6RSbmFrJLx8tqbazv27jFrxVWKqA1ZiUAZzh5 Wp1Ffgb5Uf+sgxNx8+fmGOot6Bmaibx90bRFPdmAwD68pu/bmxYmJHJMJ/djMTTC9u02 dQQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc; bh=ZIBOvjv/Xin5v5X6LkS6/lb1LtcfHMRRcbIiBMW4c2k=; b=bLVVefIr9zQfOhbhJ2YI+YhtiZLrjtN+CSkWl3vEMo45huk/Ev6TGkVeBk+2odB2jR u+XyvncjLM75fupDeCzxXXz9S7wWKWUG9u3Ay3bHri1hhtoIKRydjKxoJuSWkcMvqP91 svqga1F0/uDldi09Cx9Nt+7/AVjLvGDXbWDEu1yRScv67mUb5f4VUwnZb6YMgkUUecB6 3hl90uvWb8wiDx9x8Mx6xbu4z7X/oafwj8pyLssB0iLIT0M1s3vbfSvIMtUCvk4RbxNJ rDPU/26WvJLZnmCYSiAwzrIslO8ilto0JnTBAtmKGvKZpn98FJOJgowwNpqpMui0IyWN Vw+w== X-Gm-Message-State: ACgBeo0q9x4qJMiv7XS62uJpTfgQzm/4YmsEFVn+iB+uCh1RajkyYkGS LwlSnLbT221qFAl/8yLnZj4= X-Google-Smtp-Source: AA6agR6KV0Gzg2MWpN0j44irw5BhWrjeE89xGQuqIhMpPsVyCkPzA9FAp6id+NxUwPw7l+ib9TGTDQ== X-Received: by 2002:a05:6402:2547:b0:448:5081:efc3 with SMTP id l7-20020a056402254700b004485081efc3mr12684228edb.222.1661920694520; Tue, 30 Aug 2022 21:38:14 -0700 (PDT) Received: from [10.11.0.126] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id bh23-20020a170906a0d700b0073d7e58b1bcsm6634174ejb.157.2022.08.30.21.38.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 30 Aug 2022 21:38:13 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------zMYP7WaPqHBeN7wUepcFTAVU" Message-ID: Date: Wed, 31 Aug 2022 06:38:06 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH][_GLIBCXX_DEBUG] Review null string assertions (was: Add basic_string::starts_with/ends_with checks) Content-Language: fr To: Jonathan Wakely Cc: "libstdc++@gcc.gnu.org" , gcc-patches References: From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= In-Reply-To: X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------zMYP7WaPqHBeN7wUepcFTAVU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit If I got your point correctly here is this patch again with just the change on '0' becoming 'nullptr' in assertions.     libstdc++: [_GLIBCXX_DEBUG] Review nullptr assertion diagnostics     Review null string checks to show:     _String != nullptr     rather than:     _String != 0     libstdc++-v3/ChangeLog:             * include/debug/debug.h: Use nullptr rather than '0' in checks in post-C++11.             * include/debug/string: Likewise.             * testsuite/21_strings/basic_string/operations/ends_with/char.cc: Use __gnu_test::string.             * testsuite/21_strings/basic_string/operations/ends_with/nonnull.cc: Likewise.             * testsuite/21_strings/basic_string/operations/ends_with/wchar_t.cc: Likewise.             * testsuite/21_strings/basic_string/operations/starts_with/wchar_t.cc: Likewise.             * testsuite/21_strings/basic_string/operations/starts_with/nonnull.cc: Likewise.             * testsuite/21_strings/basic_string/operations/starts_with/char.cc: Likewise.. Ok to commit ? François On 26/08/22 11:31, Jonathan Wakely wrote: > On Sun, 14 Aug 2022 at 16:34, François Dumont via Libstdc++ > wrote: >> I think we can add those checks. >> >> Note that I wonder if it was needed as in basic_string_view I see usages >> of __attribute__((__nonnull__)). But running the test I saw no impact >> even after I try to apply this attribute to the starts_with/ends_with >> methods themselves. > That should cause warnings, and does when I try it. > > As you say, the relevant string_view constructor already has that anyway: > > __attribute__((__nonnull__)) constexpr > basic_string_view(const _CharT* __str) noexcept > > And so does string_view::find. The problem is that those only help if > the compiler inlines the calls to those functions and so can propagate > the null value all the way down to a function with the attribute. > Adding the attribute to the relevant starts_with, ends_with and > contains functions makes the diagnostics more likely to be emitted > without optimization. > >> Also note that several checks like the ones I am adding here are XFAILS >> when using 'make check' because of the segfault rather than on a proper >> debug checks. Would you prefer to add dg-require-debug-mode to those ? >> >> libstdc++: [_GLIBCXX_DEBUG] Add basic_string::starts_with/ends_with >> checks >> >> Add simple checks on C string parameters which should not be null. >> >> Review null string checks to show: >> _String != nullptr >> >> rather than: >> _String != 0 > I don't really like the extra complexity in the macros, but this does > seem like a nice improvement for what users see. > > We could use __null for C++98, which is a compiler keyword that > expands to a null pointer constant, but I'm not sure if that would be > clear to all users or not. Maybe 0 is better. > > . --------------zMYP7WaPqHBeN7wUepcFTAVU Content-Type: text/x-patch; charset=UTF-8; name="debug_nullptr_string.patch" Content-Disposition: attachment; filename="debug_nullptr_string.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL2RlYnVnLmggYi9saWJz dGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9kZWJ1Zy5oCmluZGV4IDI4ZTI1MGYwYzUwLi5mNDIz Mzc2MDQyNiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvZGVidWcu aAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9kZWJ1Zy5oCkBAIC0xMTgsMTAg KzExOCwxNyBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKICAgX19nbGliY3h4X2NoZWNrX2hl YXAoX0ZpcnN0LF9MYXN0KQogIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXBfcHJl ZChfRmlyc3QsX0xhc3QsX1ByZWQpCVwKICAgX19nbGliY3h4X2NoZWNrX2hlYXBfcHJlZChf Rmlyc3QsX0xhc3QsX1ByZWQpCi0jIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5n KF9TdHJpbmcpCVwKKyMgaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjICBkZWZpbmUgX19n bGliY3h4X3JlcXVpcmVzX3N0cmluZyhfU3RyaW5nKQlcCiAgIF9HTElCQ1hYX0RFQlVHX1BF REFTU0VSVChfU3RyaW5nICE9IDApCi0jIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc3Ry aW5nX2xlbihfU3RyaW5nLF9MZW4pCVwKKyMgIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNf c3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pCVwKICAgX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJU KF9TdHJpbmcgIT0gMCB8fCBfTGVuID09IDApCisjIGVsc2UKKyMgIGRlZmluZSBfX2dsaWJj eHhfcmVxdWlyZXNfc3RyaW5nKF9TdHJpbmcpCVwKKyAgX0dMSUJDWFhfREVCVUdfUEVEQVNT RVJUKF9TdHJpbmcgIT0gbnVsbHB0cikKKyMgIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNf c3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pCVwKKyAgX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJU KF9TdHJpbmcgIT0gbnVsbHB0ciB8fCBfTGVuID09IDApCisjIGVuZGlmCiAjIGRlZmluZSBf X2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX0ZpcnN0LF9MYXN0KQlcCiAgIF9fZ2xp YmN4eF9jaGVja19pcnJlZmxleGl2ZShfRmlyc3QsX0xhc3QpCiAjIGRlZmluZSBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUyKF9GaXJzdCxfTGFzdCkJXApkaWZmIC0tZ2l0IGEv bGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc3RyaW5nIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvZGVidWcvc3RyaW5nCmluZGV4IGMzMmViNDFlYWNkLi41NzRhNzhlM2RhYyAxMDA2NDQK LS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc3RyaW5nCisrKyBiL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2RlYnVnL3N0cmluZwpAQCAtNTAsMTQgKzUwLDI1IEBACiAjZW5kaWYK IAogI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCi0jIGRlZmluZSBfX2dsaWJjeHhf Y2hlY2tfc3RyaW5nKF9TdHJpbmcpCQkJCVwKKyMgaWYgX19jcGx1c3BsdXMgPCAyMDExMDNM CisjICBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfU3RyaW5nKQkJCVwKICAgX0dM SUJDWFhfREVCVUdfVkVSSUZZX1NUUl9DT05EX0FUKF9TdHJpbmcgIT0gMCwJCVwKIAkJCQkg ICAgX19GSUxFX18sIF9fTElORV9fLAkJXAogCQkJCSAgICBfX1BSRVRUWV9GVU5DVElPTl9f KTsKLSMgZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9TdHJpbmcsX0xlbikJ CVwKKyMgIGRlZmluZSBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfU3RyaW5nLF9MZW4p CQlcCiAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9TVFJfQ09ORF9BVChfU3RyaW5nICE9IDAg fHwgX0xlbiA9PSAwLAlcCiAJCQkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKIAkJCQkg ICAgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisjIGVsc2UKKyMgIGRlZmluZSBfX2dsaWJjeHhf Y2hlY2tfc3RyaW5nKF9TdHJpbmcpCQkJXAorICBfR0xJQkNYWF9ERUJVR19WRVJJRllfU1RS X0NPTkRfQVQoX1N0cmluZyAhPSBudWxscHRyLAkJXAorCQkJCSAgICBfX0ZJTEVfXywgX19M SU5FX18sCQlcCisJCQkJICAgIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworIyAgZGVmaW5lIF9f Z2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9TdHJpbmcsX0xlbikJCVwKKyAgX0dMSUJDWFhf REVCVUdfVkVSSUZZX1NUUl9DT05EX0FUKF9TdHJpbmcgIT0gbnVsbHB0ciB8fCBfTGVuID09 IDAsCVwKKwkJCQkgICAgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJCSAgICBfX1BSRVRU WV9GVU5DVElPTl9fKTsKKyMgZW5kaWYKICNlbHNlCiAjIGRlZmluZSBfX2dsaWJjeHhfY2hl Y2tfc3RyaW5nKF9TdHJpbmcpCiAjIGRlZmluZSBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xl bihfU3RyaW5nLF9MZW4pCkBAIC03NSw4ICs4NiwxMyBAQCBuYW1lc3BhY2UgX19nbnVfZGVi dWcKIAkJICAgY29uc3QgY2hhciogX19mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKChfX3VudXNl ZF9fKSkpCiAgICAgewogI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCisjIGlmIF9f Y3BsdXNwbHVzIDwgMjAxMTAzTAogICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX1NUUl9D T05EX0FUKF9fcyAhPSAwIHx8IF9fbiA9PSAwLAogCQkJCQlfX2ZpbGUsIF9fbGluZSwgX19m dW5jdGlvbik7CisjIGVsc2UKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9TVFJfQ09O RF9BVChfX3MgIT0gbnVsbHB0ciB8fCBfX24gPT0gMCwKKwkJCQkJX19maWxlLCBfX2xpbmUs IF9fZnVuY3Rpb24pOworIyBlbmRpZgogI2VuZGlmCiAgICAgICByZXR1cm4gX19zOwogICAg IH0KQEAgLTkwLDggKzEwNiwxMyBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKIAkJICAgY29u c3QgY2hhciogX19mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpCiAgICAg ewogI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCisjIGlmIF9fY3BsdXNwbHVzIDwg MjAxMTAzTAogICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX1NUUl9DT05EX0FUKF9fcyAh PSAwLAogCQkJCQlfX2ZpbGUsIF9fbGluZSwgX19mdW5jdGlvbik7CisjIGVsc2UKKyAgICAg IF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9TVFJfQ09ORF9BVChfX3MgIT0gbnVsbHB0ciwKKwkJ CQkJX19maWxlLCBfX2xpbmUsIF9fZnVuY3Rpb24pOworIyBlbmRpZgogI2VuZGlmCiAgICAg ICByZXR1cm4gX19zOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3Vp dGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvY2hhci5j YyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3Bl cmF0aW9ucy9lbmRzX3dpdGgvY2hhci5jYwppbmRleCBjZmUxOGUwMTg2Yy4uM2NmODUxMjFl MzYgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNp Y19zdHJpbmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvY2hhci5jYworKysgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvZW5kc193 aXRoL2NoYXIuY2MKQEAgLTIwLDcgKzIwLDcgQEAKIAogLy8gYmFzaWNfc3RyaW5nIGVuZHNf d2l0aAogCi0jaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9zdHJpbmcu aD4KICNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KIAogdm9pZApAQCAtMzEsNyArMzEs NyBAQCB0ZXN0MDEoKQogICBjb25zdCBjaGFyIGNzdHJfc3VmMltdID0gIi5yZ2IiOwogICBj b25zdCBzdGQ6OnN0cmluZ192aWV3IHN2X3N1ZjIoIi5yZ2IiKTsKIAotICBjb25zdCBzdGQ6 OnN0cmluZyBzX3Rlc3QoInNsdWdzL3NsaW15LmpwZyIpOworICBjb25zdCBfX2dudV90ZXN0 OjpzdHJpbmcgc190ZXN0KCJzbHVncy9zbGlteS5qcGciKTsKIAogICBjb25zdCBhdXRvIGNz dHJfaW5fc2x1Z3MgPSBzX3Rlc3QuZW5kc193aXRoKGNzdHJfc3VmKTsKICAgVkVSSUZZKCBj c3RyX2luX3NsdWdzICk7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIx X3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvZW5kc193aXRoL25vbm51bGwuY2Mg Yi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJh dGlvbnMvZW5kc193aXRoL25vbm51bGwuY2MKaW5kZXggMWYyYTE1NmJhY2UuLjcwYWI4Njdm YTRlIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFz aWNfc3RyaW5nL29wZXJhdGlvbnMvZW5kc193aXRoL25vbm51bGwuY2MKKysrIGIvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL2Vu ZHNfd2l0aC9ub25udWxsLmNjCkBAIC0xLDEwICsxLDEwIEBACiAvLyB7IGRnLW9wdGlvbnMg Ii1zdGQ9Z251KysyMCAtV25vbm51bGwgLU8wIiB9CiAvLyB7IGRnLWRvIGNvbXBpbGUgeyB0 YXJnZXQgYysrMjAgfSB9CiAKLSNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dGVzdHN1 aXRlX3N0cmluZy5oPgogCiB2b2lkCi10ZXN0MDEoY29uc3Qgc3RkOjpzdHJpbmcmIHMpCit0 ZXN0MDEoY29uc3QgX19nbnVfdGVzdDo6c3RyaW5nJiBzKQogewogICBzLmVuZHNfd2l0aCgo Y29uc3QgY2hhciopbnVsbHB0cik7ICAvLyB7IGRnLXdhcm5pbmcgIlxcXFstV25vbm51bGwi IH0KICAgcy5lbmRzX3dpdGgoKGNoYXIqKW51bGxwdHIpOwkgICAgICAvLyB7IGRnLXdhcm5p bmcgIlxcXFstV25vbm51bGwiIH0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3Vp dGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvd2NoYXJf dC5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcv b3BlcmF0aW9ucy9lbmRzX3dpdGgvd2NoYXJfdC5jYwppbmRleCBkMjdlODI0NmZiOC4uNzBi NTIyZmY2OWUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5n cy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9lbmRzX3dpdGgvd2NoYXJfdC5jYworKysgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlv bnMvZW5kc193aXRoL3djaGFyX3QuY2MKQEAgLTIwLDcgKzIwLDcgQEAKIAogLy8gYmFzaWNf c3RyaW5nIGVuZHNfd2l0aAogCi0jaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRlc3Rz dWl0ZV9zdHJpbmcuaD4KICNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KIAogdm9pZApA QCAtMzEsNyArMzEsNyBAQCB0ZXN0MDEoKQogICBjb25zdCB3Y2hhcl90IGNzdHJfc3VmMltd ID0gTCIucmdiIjsKICAgY29uc3Qgc3RkOjp3c3RyaW5nX3ZpZXcgc3Zfc3VmMihMIi5yZ2Ii KTsKIAotICBjb25zdCBzdGQ6OndzdHJpbmcgc190ZXN0KEwic2x1Z3Mvc2xpbXkuanBnIik7 CisgIGNvbnN0IF9fZ251X3Rlc3Q6OndzdHJpbmcgc190ZXN0KEwic2x1Z3Mvc2xpbXkuanBn Iik7CiAKICAgY29uc3QgYXV0byBjc3RyX2luX3NsdWdzID0gc190ZXN0LmVuZHNfd2l0aChj c3RyX3N1Zik7CiAgIFZFUklGWSggY3N0cl9pbl9zbHVncyApOwpkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25z L3N0YXJ0c193aXRoL2NoYXIuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmlu Z3MvYmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvc3RhcnRzX3dpdGgvY2hhci5jYwppbmRleCA1 YzBiM2FmYzBiNi4uZGRkZjUxY2VlMTYgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC9j aGFyLmNjCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19z dHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC9jaGFyLmNjCkBAIC0yMCw3ICsyMCw3IEBA CiAKIC8vIGJhc2ljX3N0cmluZyBiZWdpbnNfd2l0aAogCi0jaW5jbHVkZSA8c3RyaW5nPgor I2luY2x1ZGUgPHRlc3RzdWl0ZV9zdHJpbmcuaD4KICNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9v a3MuaD4KIAogdm9pZApAQCAtMzEsNyArMzEsNyBAQCB0ZXN0MDEoKQogICBjb25zdCBjaGFy IGNzdHJfZGlyMltdID0gIndvcm1zLyI7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nX3ZpZXcgc3Zf ZGlyMigid29ybXMvIik7CiAKLSAgY29uc3Qgc3RkOjpzdHJpbmcgc190ZXN0KCJzbHVncy9z bGlteS5qcGciKTsKKyAgY29uc3QgX19nbnVfdGVzdDo6c3RyaW5nIHNfdGVzdCgic2x1Z3Mv c2xpbXkuanBnIik7CiAKICAgY29uc3QgYXV0byBjc3RyX2luX3NsdWdzID0gc190ZXN0LnN0 YXJ0c193aXRoKGNzdHJfZGlyKTsKICAgVkVSSUZZKCBjc3RyX2luX3NsdWdzICk7CmRpZmYg LS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5n L29wZXJhdGlvbnMvc3RhcnRzX3dpdGgvbm9ubnVsbC5jYyBiL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjFfc3RyaW5ncy9iYXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC9u b25udWxsLmNjCmluZGV4IDg1MTQzNTljODc3Li4zNDYxNGJlMGFiNiAxMDA2NDQKLS0tIGEv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRp b25zL3N0YXJ0c193aXRoL25vbm51bGwuY2MKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0 ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL3N0YXJ0c193aXRoL25vbm51 bGwuY2MKQEAgLTEsMTAgKzEsMTAgQEAKIC8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzIw IC1Xbm9ubnVsbCAtTzAiIH0KIC8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysyMCB9 IH0KIAotI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfc3RyaW5nLmg+ CiAKIHZvaWQKLXRlc3QwMShjb25zdCBzdGQ6OnN0cmluZyYgcykKK3Rlc3QwMShjb25zdCBf X2dudV90ZXN0OjpzdHJpbmcmIHMpCiB7CiAgIHMuc3RhcnRzX3dpdGgoKGNvbnN0IGNoYXIq KW51bGxwdHIpOyAgLy8geyBkZy13YXJuaW5nICJcXFxbLVdub25udWxsIiB9CiAgIHMuc3Rh cnRzX3dpdGgoKGNoYXIqKW51bGxwdHIpOwkvLyB7IGRnLXdhcm5pbmcgIlxcXFstV25vbm51 bGwiIH0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjFfc3RyaW5ncy9i YXNpY19zdHJpbmcvb3BlcmF0aW9ucy9zdGFydHNfd2l0aC93Y2hhcl90LmNjIGIvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS8yMV9zdHJpbmdzL2Jhc2ljX3N0cmluZy9vcGVyYXRpb25zL3N0 YXJ0c193aXRoL3djaGFyX3QuY2MKaW5kZXggZWRhNzMyMTJlYTAuLjc0N2IyM2FlNWMyIDEw MDY0NAotLS0gYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3Ry aW5nL29wZXJhdGlvbnMvc3RhcnRzX3dpdGgvd2NoYXJfdC5jYworKysgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIxX3N0cmluZ3MvYmFzaWNfc3RyaW5nL29wZXJhdGlvbnMvc3RhcnRz X3dpdGgvd2NoYXJfdC5jYwpAQCAtMjAsNyArMjAsNyBAQAogCiAvLyBiYXNpY19zdHJpbmcg YmVnaW5zX3dpdGgKIAotI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVf c3RyaW5nLmg+CiAjaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CiAKIHZvaWQKQEAgLTMx LDcgKzMxLDcgQEAgdGVzdDAxKCkKICAgY29uc3Qgd2NoYXJfdCBjc3RyX2RpcjJbXSA9IEwi d29ybXMvIjsKICAgY29uc3Qgc3RkOjp3c3RyaW5nX3ZpZXcgc3ZfZGlyMihMIndvcm1zLyIp OwogCi0gIGNvbnN0IHN0ZDo6d3N0cmluZyBzX3Rlc3QoTCJzbHVncy9zbGlteS5qcGciKTsK KyAgY29uc3QgX19nbnVfdGVzdDo6d3N0cmluZyBzX3Rlc3QoTCJzbHVncy9zbGlteS5qcGci KTsKIAogICBjb25zdCBhdXRvIGNzdHJfaW5fc2x1Z3MgPSBzX3Rlc3Quc3RhcnRzX3dpdGgo Y3N0cl9kaXIpOwogICBWRVJJRlkoIGNzdHJfaW5fc2x1Z3MgKTsK --------------zMYP7WaPqHBeN7wUepcFTAVU--