From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.cs.ucla.edu (mail.cs.ucla.edu [131.179.128.66]) by sourceware.org (Postfix) with ESMTPS id 8ABFF3858D20 for ; Thu, 13 Apr 2023 14:39:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8ABFF3858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=cs.ucla.edu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=cs.ucla.edu Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id CB2493C020F4E; Thu, 13 Apr 2023 07:39:48 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id wS3ZokEDmeJA; Thu, 13 Apr 2023 07:39:48 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 4AF563C097AFA; Thu, 13 Apr 2023 07:39:48 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 4AF563C097AFA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1681396788; bh=teQFHltVU6CP5L+OPxH+cWZwgY/cojpFqHtgS9VqcJs=; h=Message-ID:Date:MIME-Version:To:From; b=dUW94gw1GxPK69X4hyWgFcWylMg7fMEWlGvELi13F5Whi5hHb3shse1kz5GGtwzjf iBYpVxGvGqTmZGWty6kAxoQ8INChJ5unI/ZtacrjGDT5iBS/4GsZXY3MZ5ax4pEhxV SQEhlipHqtUZEJbjyxq1j7pzU+4/Vi20IQS96VCNQnRtWthMauYKVDtbT7OrTpcJoN zo2Ru6yJeUVC77LO3D3Q8znKn9pyVJj+WvpTy3rq08Lx9cJH6TnB7HG0LETQr4+AkQ 2BsCk44GYl2/0aeLzGBbFKKbWdhu20pfwUgHbgw4umkjMeEaYo5DXnvtu4uuEnZn7f QHzjaWG7xWfNg== X-Virus-Scanned: amavisd-new at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id eZf3W0Q5Kn84; Thu, 13 Apr 2023 07:39:48 -0700 (PDT) Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id 316D53C020F4E; Thu, 13 Apr 2023 07:39:48 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------c121valSdYVbzV7CZ34Un86p" Message-ID: <29250231-189b-ed82-4569-fea885f96526@cs.ucla.edu> Date: Thu, 13 Apr 2023 07:39:44 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [PATCH 1/2] Implement strlcpy and strlcat [BZ #178] To: Florian Weimer Cc: libc-alpha@sourceware.org References: <3e699937-2b0d-7218-3f97-ab54154806c1@cs.ucla.edu> <874jpkdndj.fsf@oldenburg.str.redhat.com> Content-Language: en-US From: Paul Eggert Organization: UCLA Computer Science Department In-Reply-To: <874jpkdndj.fsf@oldenburg.str.redhat.com> X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,JMQ_SPF_NEUTRAL,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,TXREP 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. --------------c121valSdYVbzV7CZ34Un86p Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 4/13/23 04:37, Florian Weimer wrote: > This makes it defined to call strlcpy with an incorrect (too small) > destination buffer size as long as the source string is short enough. > Is this really necessary? The fortified implementation checks the > destination buffer size unconditionally (like we do for other > functions), and it does not match this documentation as a result. Oh, good point. Revised patch attached. It also says behavior is undefined if the source string overlaps the destination buffer. Although the fortified implementation doesn't check that, we should preserve the ability to check for that in the future, as it's a true danger sign. --------------c121valSdYVbzV7CZ34Un86p Content-Type: text/x-patch; charset=UTF-8; name="0001-manual-improve-strlcpy-strlcat-doc.patch" Content-Disposition: attachment; filename="0001-manual-improve-strlcpy-strlcat-doc.patch" Content-Transfer-Encoding: base64 RnJvbSAzZTcwN2QxODVjOTljNmRlYTNkZmU5YmQyOWYyN2ZlYTJhMmNiNzk0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTYXQsIDggQXByIDIwMjMgMTM6NTQ6MzcgLTA3MDAKU3ViamVjdDogW1BBVENI XSBtYW51YWw6IGltcHJvdmUgc3RybGNweS9zdHJsY2F0IGRvYwoKKiBORVdTOiBSZW1vdmUg ZHVwbGljYXRlIGFubm91bmNlbWVudCBvZiBzdHJsY3B5L3N0cmxjYXQuCiogbWFudWFsL21h aW50LnRleGkgKFNvdXJjZSBGb3J0aWZpY2F0aW9uKToKTWVudGlvbiBzdHJsY3B5IGFuZCBz dHJsY2F0LgoqIG1hbnVhbC9zdHJpbmcudGV4aSAoVHJ1bmNhdGluZyBTdHJpbmdzKTogSW4g c3RybGNweS9zdHJsY2F0LAptZW50aW9uIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgZW5zdXJl IHJvb20gZm9yIHRoZSB0ZXJtaW5hdGluZwpudWxsIGJ5dGUsIGFzIGRyYWZ0IFBPU0lYIGRv ZXMuICBEb24ndCBzYXkgdGhhdCB0aGUgYmVoYXZpb3IKaXMgdW5kZWZpbmVkIG1lcmVseSBi ZWNhdXNlIHRoZSBzaXplIGlzIHplcm8sIHNpbmNlIGl0J3Mgd2VsbCBkZWZpbmVkLgpBY2N1 cmF0ZWx5IGRlc2NyaWJlIHRoZSBjb25zdHJhaW50cyBpbXBvc2VkIGJ5ICdyZXN0cmljdCcs CndoaWNoIGFyZSBzdHJpY3RlciB0aGFuIHRoZSBjb25zdHJhaW50cyBpbXBvc2VkIGJ5IG5v dCBhbGxvd2luZwpvdmVybGFwcGluZyBjb3BpZXMuClVzZSB0aGUgc2FtZSBsYW5ndWFnZSBh Ym91dCBzdHJpbmctcHJvY2Vzc2luZyBjaG9pY2UKYW5kIGFib3V0IHBlcmZvcm1hbmNlIHRo YXQgd2UgYWxyZWFkeSB1c2UgZm9yIHN0cm5jcHkgYW5kIHN0cm5jYXQuCkF2b2lkIHVubmVj ZXNzYXJpbHktZGlmZmVyZW50IHdvcmRpbmcgYmV0d2VlbiBzdHJsY3B5IGFuZCBzdHJsY2F0 CnRoYXQgbWlnaHQgY2F1c2UgdGhlIHJlYWRlciB0byBtaXN0YWtlbmx5IHRoaW5rIG9mIG90 aGVyIGRpZmZlcmVuY2VzLgpNZW50aW9uIHRoYXQgc3RybGNweSBpcyBPKG1heChzaXplLCBz dHJsZW4oc3JjKSkpLCBub3QgTyhzaXplKS4KLS0tCiBORVdTICAgICAgICAgICAgICAgfCAg NCArLS0KIG1hbnVhbC9tYWludC50ZXhpICB8ICA0ICsrKwogbWFudWFsL3N0cmluZy50ZXhp IHwgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9ORVdTIGIvTkVXUwppbmRleCA2MGI0MGZhYmNmLi5iMjFjNGMxMGFhIDEw MDY0NAotLS0gYS9ORVdTCisrKyBiL05FV1MKQEAgLTIyLDcgKzIyLDcgQEAgTWFqb3IgbmV3 IGZlYXR1cmVzOgogKiBQUkliKiBhbmQgUFJJQiogbWFjcm9zIGZyb20gQzJYIGhhdmUgYmVl biBhZGRlZCB0byA8aW50dHlwZXMuaD4uCiAKICogVGhlIHN0cmxjcHkgYW5kIHN0cmxjYXQg ZnVuY3Rpb25zIGhhdmUgYmVlbiBhZGRlZC4gIFRoZXkgYXJlIGRlcml2ZWQKLSAgZnJvbSBP cGVuQlNELCBhbmQgYXJlIGV4cGVjdGVkIHRvIGJlIGFkZGVkIHRvIGEgZnV0dXJlIFBPU0lY IHZlcnNpb25zLgorICBmcm9tIE9wZW5CU0QsIGFuZCBhcmUgZXhwZWN0ZWQgdG8gYmUgYWRk ZWQgdG8gYSBmdXR1cmUgUE9TSVggdmVyc2lvbi4KIAogRGVwcmVjYXRlZCBhbmQgcmVtb3Zl ZCBmZWF0dXJlcywgYW5kIG90aGVyIGNoYW5nZXMgYWZmZWN0aW5nIGNvbXBhdGliaWxpdHk6 CiAKQEAgLTIyNiw4ICsyMjYsNiBAQCBNYWpvciBuZXcgZmVhdHVyZXM6CiAKICAgVGhlIExv b25nQXJjaCBBQkkgaXMgNjQtYml0IGxpdHRsZS1lbmRpYW4uCiAKLSogVGhlIGZ1bmN0aW9u cyBzdHJsY3B5IGFuZCBzdHJsY2F0IGhhdmUgYmVlbiBhZGRlZC4KLQogRGVwcmVjYXRlZCBh bmQgcmVtb3ZlZCBmZWF0dXJlcywgYW5kIG90aGVyIGNoYW5nZXMgYWZmZWN0aW5nIGNvbXBh dGliaWxpdHk6CiAKICogU3VwcG9ydCBmb3IgcHJlbGluayB3aWxsIGJlIHJlbW92ZWQgaW4g dGhlIG5leHQgcmVsZWFzZTsgdGhpcyBpbmNsdWRlcwpkaWZmIC0tZ2l0IGEvbWFudWFsL21h aW50LnRleGkgYi9tYW51YWwvbWFpbnQudGV4aQppbmRleCBhODQ0MWUyMGI2Li4zYWQ0NjQ3 Y2YzIDEwMDY0NAotLS0gYS9tYW51YWwvbWFpbnQudGV4aQorKysgYi9tYW51YWwvbWFpbnQu dGV4aQpAQCAtMzcxLDYgKzM3MSwxMCBAQCBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQg bWFjcm9zIGFyZSBmb3J0aWZpZWQgaW4gQHRoZWdsaWJje306CiAKIEBpdGVtIEBjb2Rle3N0 cmNweX0KIAorQGl0ZW0gQGNvZGV7c3RybGNhdH0KKworQGl0ZW0gQGNvZGV7c3RybGNweX0K KwogQGl0ZW0gQGNvZGV7c3RybmNhdH0KIAogQGl0ZW0gQGNvZGV7c3RybmNweX0KZGlmZiAt LWdpdCBhL21hbnVhbC9zdHJpbmcudGV4aSBiL21hbnVhbC9zdHJpbmcudGV4aQppbmRleCA1 N2UzZjZhNjE5Li5hMTRlZTA4YzBjIDEwMDY0NAotLS0gYS9tYW51YWwvc3RyaW5nLnRleGkK KysrIGIvbWFudWFsL3N0cmluZy50ZXhpCkBAIC03MjYsOCArNzI2LDggQEAgVGhpcyBmdW5j dGlvbiBoYXMgdW5kZWZpbmVkIHJlc3VsdHMgaWYgdGhlIHN0cmluZ3Mgb3ZlcmxhcC4KIEFz IG5vdGVkIGJlbG93LCB0aGlzIGZ1bmN0aW9uIGhhcyBzaWduaWZpY2FudCBwZXJmb3JtYW5j ZSBpc3N1ZXMuCiBAZW5kIGRlZnR5cGVmdW4KIAotUHJvZ3JhbW1lcnMgdXNpbmcgdGhlIEBj b2Rle3N0cmNhdH0gb3IgQGNvZGV7d2NzY2F0fSBmdW5jdGlvbiAob3IgdGhlCi1AY29kZXtz dHJuY2F0fSBvciBAY29kZXt3Y3NuY2F0fSBmdW5jdGlvbnMgZGVmaW5lZCBpbgorUHJvZ3Jh bW1lcnMgdXNpbmcgdGhlIEBjb2Rle3N0cmNhdH0gb3IgQGNvZGV7d2NzY2F0fSBmdW5jdGlv bnMgKG9yIHRoZQorQGNvZGV7c3RybGNhdH0sIEBjb2Rle3N0cm5jYXR9IGFuZCBAY29kZXt3 Y3NuY2F0fSBmdW5jdGlvbnMgZGVmaW5lZCBpbgogYSBsYXRlciBzZWN0aW9uLCBmb3IgdGhh dCBtYXR0ZXIpCiBjYW4gZWFzaWx5IGJlIHJlY29nbml6ZWQgYXMgbGF6eSBhbmQgcmVja2xl c3MuICBJbiBhbG1vc3QgYWxsIHNpdHVhdGlvbnMKIHRoZSBsZW5ndGhzIG9mIHRoZSBwYXJ0 aWNpcGF0aW5nIHN0cmluZ3MgYXJlIGtub3duIChpdCBiZXR0ZXIgc2hvdWxkIGJlCkBAIC04 NDgsNyArODQ4LDggQEAgZnVuY3Rpb24uICBUaGUgZXhhbXBsZSB3b3VsZCB3b3JrIGZvciB3 aWRlIGNoYXJhY3RlcnMgdGhlIHNhbWUgd2F5LgogV2hlbmV2ZXIgYSBwcm9ncmFtbWVyIGZl ZWxzIHRoZSBuZWVkIHRvIHVzZSBAY29kZXtzdHJjYXR9IHNoZSBvciBoZQogc2hvdWxkIHRo aW5rIHR3aWNlIGFuZCBsb29rIHRocm91Z2ggdGhlIHByb2dyYW0gdG8gc2VlIHdoZXRoZXIg dGhlIGNvZGUgY2Fubm90CiBiZSByZXdyaXR0ZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgYWxy ZWFkeSBjYWxjdWxhdGVkIHJlc3VsdHMuCi1UaGUgcmVsYXRlZCBmdW5jdGlvbnMgQGNvZGV7 c3RybmNhdH0gYW5kIEBjb2Rle3djc2NhdH0KK1RoZSByZWxhdGVkIGZ1bmN0aW9ucyBAY29k ZXtzdHJsY2F0fSwgQGNvZGV7c3RybmNhdH0sCitAY29kZXt3Y3NjYXR9IGFuZCBAY29kZXt3 Y3NuY2F0fQogYXJlIGFsbW9zdCBhbHdheXMgdW5uZWNlc3NhcnksIHRvby4KIEFnYWluOiBp dCBpcyBhbG1vc3QgYWx3YXlzIHVubmVjZXNzYXJ5IHRvIHVzZSBmdW5jdGlvbnMgbGlrZSBA Y29kZXtzdHJjYXR9LgogCkBAIC0xMDc5LDEzICsxMDgwLDE1IEBAIGlzc3Vlcy4gIEB4cmVm e0NvbmNhdGVuYXRpbmcgU3RyaW5nc30uCiBAZGVmdHlwZWZ1biBzaXplX3Qgc3RybGNweSAo Y2hhciAqcmVzdHJpY3QgQHZhcnt0b30sIGNvbnN0IGNoYXIgKnJlc3RyaWN0IEB2YXJ7ZnJv bX0sIHNpemVfdCBAdmFye3NpemV9KQogQHN0YW5kYXJkc3tCU0QsIHN0cmluZy5ofQogQHNh ZmV0eXtAcHJlbGlte31AbXRzYWZle31AYXNzYWZle31AYWNzYWZle319Ci1UaGlzIGZ1bmN0 aW9uIGlzIHNpbWlsYXIgdG8gQGNvZGV7c3RyY3B5fSwgYnV0IGNvcGllcyBhdCBtb3N0Ci1A dmFye3NpemV9IGJ5dGVzIGZyb20gdGhlIHN0cmluZyBAdmFye2Zyb219IGludG8gdGhlIGRl c3RpbmF0aW9uCi1hcnJheSBAdmFye3RvfSwgaW5jbHVkaW5nIGEgdGVybWluYXRpbmcgbnVs bCBieXRlLgorVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIHN0cmluZyBAdmFye2Zyb219IHRv IHRoZSBkZXN0aW5hdGlvbiBhcnJheQorQHZhcnt0b30sIGxpbWl0aW5nIHRoZSByZXN1bHQn cyBzaXplIChpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvcikKK3RvIEB2YXJ7c2l6ZX0u ICBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhhdCBAdmFye3NpemV9IGluY2x1ZGVzIHJv b20KK2ZvciB0aGUgcmVzdWx0J3MgdGVybWluYXRpbmcgbnVsbCBieXRlLgogCiBJZiBAdmFy e3NpemV9IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgQHZhcntm cm9tfSwKLXRoaXMgZnVuY3Rpb24gY29waWVzIGFsbCBvZiB0aGUgc3RyaW5nIEB2YXJ7ZnJv bX0gdG8gdGhlIGRlc3RpbmF0aW9uCi1hcnJheSBAdmFye3RvfSwgaW5jbHVkaW5nIHRoZSB0 ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBMaWtlIG90aGVyCit0aGlzIGZ1bmN0aW9uIGNvcGll cyB0aGUgbm9uLW51bGwgYnl0ZXMgb2YgdGhlIHN0cmluZworQHZhcntmcm9tfSB0byB0aGUg ZGVzdGluYXRpb24gYXJyYXkgQHZhcnt0b30sCithbmQgdGVybWluYXRlcyB0aGUgY29weSB3 aXRoIGEgbnVsbCBieXRlLiAgTGlrZSBvdGhlcgogc3RyaW5nIGZ1bmN0aW9ucyBzdWNoIGFz IEBjb2Rle3N0cmNweX0sIGJ1dCB1bmxpa2UgQGNvZGV7c3RybmNweX0sIGFueQogcmVtYWlu aW5nIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheSByZW1haW4gdW5jaGFuZ2VkLgog CkBAIC0xMDk0LDEzICsxMDk3LDIwIEBAIElmIEB2YXJ7c2l6ZX0gaXMgbm9uemVybyBhbmQg bGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKIGJ5 dGVzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheSBAdmFye3RvfSwgYW5kIHdyaXRlcyBhIHRl cm1pbmF0aW5nIG51bGwKIGJ5dGUgdG8gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgYXJyYXkuCiAK LVRoZSByZXR1cm4gdmFsdWUgQHZhcntyZXN1bHR9IG9mIEBjb2Rle3N0cmxjcHl9IGlzIHRo ZSBsZW5ndGggb2YgdGhlCi1zdHJpbmcgQHZhcntmcm9tfS4gIFRoaXMgbWVhbnMgdGhhdCBA c2FtcHtAdmFye3Jlc3VsdH0gPj0gQHZhcntzaXplfX0gaXMKLXRydWUgd2hlbmV2ZXIgdHJ1 bmNhdGlvbiBvY2N1cnMuCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0 aGUgc3RyaW5nIEB2YXJ7ZnJvbX0uICBUaGlzIG1lYW5zCit0aGF0IHRydW5jYXRpb24gb2Nj dXJzIGlmIGFuZCBvbmx5IGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBncmVhdGVyCit0aGFu IG9yIGVxdWFsIHRvIEB2YXJ7c2l6ZX0uCiAKLVRoZSBiZWhhdmlvciBvZiBAY29kZXtzdHJs Y3B5fSBpcyB1bmRlZmluZWQgaWYgQHZhcntzaXplfSBpcyB6ZXJvLCBvciBpZgotdGhlIHNv dXJjZSBzdHJpbmcgYW5kIHRoZSBmaXJzdCBAdmFye3NpemV9IGJ5dGVzIG9mIHRoZSBkZXN0 aW5hdGlvbgotYXJyYXkgb3ZlcmxhcC4KK1RoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYg QHZhcnt0b30gb3IgQHZhcntmcm9tfSBpcyBhIG51bGwgcG9pbnRlciwKK29yIGlmIHRoZSBk ZXN0aW5hdGlvbiBhcnJheSdzIHNpemUgaXMgbGVzcyB0aGFuIEB2YXJ7c2l6ZX0sIG9yIGlm IHRoZQorc3RyaW5nIEB2YXJ7ZnJvbX0gb3ZlcmxhcHMgdGhlIHJlc3VsdCAodGhhdCBpcywg aWYgdGhlIHN0cmluZworQHZhcntmcm9tfSBvdmVybGFwcyB0aGUgZmlyc3QgQHNhbXB7TUlO IChAdmFye3NpemV9LCBzdHJsZW4KKyhAdmFye2Zyb219KSArIDEpfSBieXRlcyBvZiB0aGUg dGhlIGRlc3RpbmF0aW9uIGFycmF5IEB2YXJ7dG99KS4KKworQXMgbm90ZWQgYmVsb3csIHRo aXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IGEgcG9vciBjaG9pY2UgZm9yCitwcm9jZXNzaW5n IHN0cmluZ3MuICBBbHNvLCB0aGlzIGZ1bmN0aW9uIGhhcyBhIHBlcmZvcm1hbmNlIGlzc3Vl LAorYXMgaXRzIHRpbWUgY29zdCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIGxlbmd0aCBvZiBA dmFye2Zyb219CitldmVuIHdoZW4gQHZhcntzaXplfSBpcyBzbWFsbC4KIAogVGhpcyBmdW5j dGlvbiBpcyBkZXJpdmVkIGZyb20gT3BlbkJTRCAyLjQuCiBAZW5kIGRlZnR5cGVmdW4KQEAg LTExMDksOCArMTExOSw5IEBAIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIE9wZW5C U0QgMi40LgogQHN0YW5kYXJkc3tCU0QsIHN0cmluZy5ofQogQHNhZmV0eXtAcHJlbGlte31A bXRzYWZle31AYXNzYWZle31AYWNzYWZle319CiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgdGhl IHN0cmluZyBAdmFye2Zyb219IHRvIHRoZQotc3RyaW5nIEB2YXJ7dG99LCBsaW1pdGluZyB0 aGUgdG90YWwgc2l6ZSBvZiB0aGUgcmVzdWx0IHN0cmluZyBhdAotQHZhcnt0b30gKGluY2x1 ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yKSB0byBAdmFye3NpemV9Lgorc3RyaW5nIEB2YXJ7 dG99LCBsaW1pdGluZyB0aGUgcmVzdWx0J3MgdG90YWwgc2l6ZSAoaW5jbHVkaW5nIHRoZSBu dWxsCit0ZXJtaW5hdG9yKSB0byBAdmFye3NpemV9LiAgVGhlIGNhbGxlciBzaG91bGQgZW5z dXJlIHRoYXQgQHZhcntzaXplfQoraW5jbHVkZXMgcm9vbSBmb3IgdGhlIHJlc3VsdCdzIHRl cm1pbmF0aW5nIG51bGwgYnl0ZS4KIAogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXMgbXVjaCBh cyBwb3NzaWJsZSBvZiB0aGUgc3RyaW5nIEB2YXJ7ZnJvbX0gaW50bwogdGhlIGFycmF5IGF0 IEB2YXJ7dG99IG9mIEB2YXJ7c2l6ZX0gYnl0ZXMsIHN0YXJ0aW5nIGF0IHRoZSB0ZXJtaW5h dGluZwpAQCAtMTEyMCwxMiArMTEzMSwyMCBAQCBzdHJpbmcgd2lsbCBjb250YWluIGEgbnVs bCB0ZXJtaW5hdG9yLCBpdCBjYW4gYmUgdHJ1bmNhdGVkIChub3QgYWxsCiBieXRlcyBpbiBA dmFye2Zyb219IG1heSBiZSBjb3BpZWQpLgogCiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl IHN1bSBvZiB0aGUgb3JpZ2luYWwgbGVuZ3RoIG9mIEB2YXJ7dG99IGFuZAotdGhlIGxlbmd0 aCBvZiBAdmFye2Zyb219LiAgVGhpcyBtZWFucyB0aGF0IHRydW5jYXRpb24gb2NjdXJzIHVu bGVzcwotdGhlIHJldHVybmVkIHZhbHVlIGlzIGxlc3MgdGhhbiBAdmFye3NpemV9LgordGhl IGxlbmd0aCBvZiBAdmFye2Zyb219LiAgVGhpcyBtZWFucyB0aGF0IHRydW5jYXRpb24gb2Nj dXJzIGlmIGFuZAorb25seSBpZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZ3JlYXRlciB0aGFu IG9yIGVxdWFsIHRvIEB2YXJ7c2l6ZX0uCisKK1RoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQg aWYgQHZhcnt0b30gb3IgQHZhcntmcm9tfSBpcyBhIG51bGwgcG9pbnRlciwKK29yIGlmIHRo ZSBkZXN0aW5hdGlvbiBhcnJheSdzIHNpemUgaXMgbGVzcyB0aGFuIEB2YXJ7c2l6ZX0sIG9y IGlmIHRoZQorZGVzdGluYXRpb24gYXJyYXkgZG9lcyBub3QgY29udGFpbiBhIG51bGwgYnl0 ZSBpbiBpdHMgZmlyc3QgQHZhcntzaXplfQorYnl0ZXMsIG9yIGlmIHRoZSBzdHJpbmcgQHZh cntmcm9tfSBvdmVybGFwcyB0aGUgdG90YWwgcmVzdWx0ICh0aGF0IGlzLAoraWYgQHZhcntm cm9tfSBvdmVybGFwcyB0aGUgZmlyc3QgQHNhbXB7TUlOIChAdmFye3NpemV9LCBzdHJsZW4K KyhAdmFye2Zyb219KSArIHN0cmxlbiAoQHZhcnt0b30pICsgMSl9IGJ5dGVzIG9mIHRoZSBk ZXN0aW5hdGlvbiBhcnJheQorQHZhcnt0b30pLgogCi1UaGUgYmVoYXZpb3IgaXMgdW5kZWZp bmVkIGlmIHRoZSBhcnJheSBhdCBAdmFye3RvfSBkb2VzIG5vdCBjb250YWluIGEKLW51bGwg Ynl0ZSBpbiBpdHMgZmlyc3QgQHZhcntzaXplfSBieXRlcywgb3IgaWYgdGhlIHNvdXJjZSBz dHJpbmcgYW5kIHRoZQotZmlyc3QgQHZhcntzaXplfSBieXRlcyBvZiBAdmFye3RvfSBvdmVy bGFwLgorQXMgbm90ZWQgYmVsb3csIHRoaXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IGEgcG9v ciBjaG9pY2UgZm9yCitwcm9jZXNzaW5nIHN0cmluZ3MuICBBbHNvLCB0aGlzIGZ1bmN0aW9u IGhhcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQoraXNzdWVzLiAgQHhyZWZ7Q29uY2F0ZW5h dGluZyBTdHJpbmdzfS4KIAogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gT3BlbkJT RCAyLjQuCiBAZW5kIGRlZnR5cGVmdW4KLS0gCjIuMzkuMgoK --------------c121valSdYVbzV7CZ34Un86p--