From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 31904 invoked from network); 3 Sep 2020 13:52:17 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 3 Sep 2020 13:52:17 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1599141137; b=ltsVLRc3k0pO5SLtUac8Bcxd/UsQ7HxZsja/L95K7F0i9EZxwFIqmbCwuOA9tWN6cfQ4ldtHA7 xoI68JGa7mA0Mc5WxcT8KbZ+y9y+3V12o0Qsrt3QrS+a4C5sW77tM7qys9hWZN2m5vFY32INFs otZ6Ec9Jw0fP08SQoI5DvMKgVjVQsoJ5dgWKrdq0WdUTLqpdV0YpOas/IDrOuoF5PyaMXEOltq u2ryhyTgKBal9UlRVHb8iGaudTx4ofP2POhEfyEMdYp8ZoxDCsjAZ7Cb/SAswA+ewOgN7l7ttV kzZ0jfQzvLEpLcZO9CZN6xdsJrTl3BOTC5tVV4v1rIBMGQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lj1-f176.google.com) smtp.remote-ip=209.85.208.176; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1599141137; bh=1MceozmXEmdBBd1+HGL5A2EEgm6ZnH91J9qaQ/a68Zo=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=hokdKKqNKO2w9yQYK5k8XEfZ6YYMzBbmAoMXnuD2KRHP9rlulFo8C/ZfRB0966iRjTskwVNLSl ag5MQRVC5buZ+2owGy3vOSM2803VxX/04AA6Zhpf001gUczEMQkona2CjTCjBTENQGUa1jclI8 dIzexOt7bNLvk+BqIrTcuIzdOgXXtR0zIKplnngfFHIG4gxUW//lRZ7BPf1Jr9x3FGWDguhkBt uH2o9skGcFnHC+QfB8EL+tNcegUCsKauhkWdRhoAvV5jwet1A0rBYMDA7MTaCwzdQSKN2TFmYm bB9lEjcqiLhQ/bXPQlXtkCCZlgdCf80VhqXTJ9NtFGM8Zw==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID :Date:From:In-Reply-To:References:MIME-Version:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=ijew2XFl+Eyu8qwwgYvx+SzBgmJt6n/Onnx9WPvwVRY=; b=l2ObB8+sQeipiMxoVKkKoooYjs lgqDGd4LV82aVPl9Y+kWHzMqzH9cbqFBGLcEnnAq/vLZk23iw4UrRJoDl/pATf1l+FvX2oQDLoqDt C9e8CFxZqfTnaQvtgHNsnRmG1isr7COWnVX1KYxPt2FJqa4DxtkJrzl1eiDo7j94nR5b/q9aoTIXg Q6DkixQPaZ4LzHSXxVbL482RdtDyqMsF63iDfqEW13heSJ3ATwXUzbjkPHVpy8PjEWaEhC4Gptc+r OJeUcEX/CxGGHD90vSP1+W5q8Y1BN0BJJl+2c8PItLwnxGeTL+rbCU9ctB2TaA91VLmhba2X+hWV/ +fItkRTQ==; Received: from authenticated user by zero.zsh.org with local id 1kDpev-000LQF-LM; Thu, 03 Sep 2020 13:52:13 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lj1-f176.google.com) smtp.remote-ip=209.85.208.176; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lj1-f176.google.com ([209.85.208.176]:45308) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1kDpeX-000KqU-1s; Thu, 03 Sep 2020 13:51:49 +0000 Received: by mail-lj1-f176.google.com with SMTP id c2so3738899ljj.12 for ; Thu, 03 Sep 2020 06:51:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ijew2XFl+Eyu8qwwgYvx+SzBgmJt6n/Onnx9WPvwVRY=; b=huXYQVBV8wOHf/dOCvoZWfWJ/yVzcFAjUwwW9gF1x3JtK3C6prblAmugUtfdiZnyfw LwXx7OdBTeF9V5jUSYCbZ2JBQZl/CTYzeJWcYPeCKKOz5MAvqfe3+pYqA5BXM3fS/zkL C2fOqOj9wTkt0kkmcTcrq6WczglFgl8GUM3nFuLvN7FCBEUPgTFdcfzd8U2RniGRDSDB cCpqMjABZFfsgVpsGlboTRZ8+1bh20MDRCOiJLjkDLXqVzZwOv5OhXZyXBKOuOlxx97C lRxQ0y5Z4myQLgrP3ReCXdmWwCxRUPyHhtYiTPZSnkI5lVelSUSuv0rA7SYDFcWKDQWj lRbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ijew2XFl+Eyu8qwwgYvx+SzBgmJt6n/Onnx9WPvwVRY=; b=cbTEAZsND5FBXyxgfdGJHoIZmzf+GXo3TMXL8wuXP7WYv+iTr91uqZhHGhYxadZkss hrHKq2q0s+A07tcn2CJdGSIfcoaHyi/F/s0yIrBWjWTeyWlVFHO4xgaunQMVPeR/tN+P 0jmp5lrHQMkl1oWneeQkF3/0P3Ny9xuNQyMuJf2jqd4w+cwRwZv3Ld/XwFLe99gEhOyR 3BbKGCE78h/z1YYVp74vvyjrLl5Myro53TLwktAMM9ERC4EY41FjuKsmL9U8V3SXpDPK 8XF1eR1HmqOLEXDRwE477emkoMwL9rnoJsjwT9v//XfpWtfyOFPCWTEE1v6rwf0xKXfZ X+Tw== X-Gm-Message-State: AOAM533QkDufwAnUj0TwSv+JPKuyLKuj48QFoV93K0PlVVY+7SFxmnB5 WrQZlpoWfQoi2yZ+55VyqMQgAcszNZ2mv+FRUbU= X-Google-Smtp-Source: ABdhPJxXiowbS1XUssNw/+3BdMFiiqVFCs43sOV5xDtUki2vwzpXCGm1SiEu2bdyGCbanam8js3tuX+SEVq97e2mhNk= X-Received: by 2002:a2e:9c9:: with SMTP id 192mr1283754ljj.197.1599141107899; Thu, 03 Sep 2020 06:51:47 -0700 (PDT) MIME-Version: 1.0 References: <1563722540.4311.24.camel@samsung.com> <1565710707.5633.11.camel@samsung.com> <309829031.4459446.1587391766024@mail2.virginmedia.com> <20200503000658.6fddb904@tarpaulin.shahaf.local2> <20200503210618.5c639014@tarpaulin.shahaf.local2> <505277422.148264.1588581302888@mail2.virginmedia.com> <20200505000331.59294412@tarpaulin.shahaf.local2> <600054363.204367.1588697277901@mail2.virginmedia.com> In-Reply-To: From: =?UTF-8?Q?Timoth=C3=A9e_Mazzucotelli?= Date: Thu, 3 Sep 2020 15:51:36 +0200 Message-ID: Subject: Re: Feature request: ZSH_XTRACEFD variable To: Bart Schaefer Cc: Peter Stephenson , "zsh-workers@zsh.org" Content-Type: multipart/mixed; boundary="000000000000aebc7005ae690dad" X-Seq: 47355 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --000000000000aebc7005ae690dad Content-Type: multipart/alternative; boundary="000000000000aebc6d05ae690dab" --000000000000aebc6d05ae690dab Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, I'm coming back to the ZSH_XTRACEFD feature again :) About closing file descriptors or not: I don't understand what it means to "leak a FILE". I'm not sure to understand the past comments either: we only use fdopen when the value of ZSH_XTRACEFD is > 2. For 0, 1 and 2, we re-use the existing file descriptors stdin, stdout and stderr. Anyway, I added the patch in an attachment. Also, here's the link to the commit on my fork: https://github.com/pawamoy/zsh/commit/b9b37333fcf02a463f6f742976b37b45ab087= 42d In this patch, I never close any file descriptor. There's one last thing that looks weird to me: single instructions like ZSH_XTRACEFD=3D5 are not properly logged in the xtrace output. It seems they are truncated up to the end of the variable assignment: - with a=3D0 ZSH_XTRACEFD=3D5, nothing appear in the output either - with ZXH_XTRACEFD=3D5 a=3D0, only a=3D0 appears in the output (but no +(eval):18 prefix or similar) Any idea about this? Cheers, Timoth=C3=A9e On Wed, May 6, 2020 at 12:20 AM Bart Schaefer wrote: > (Peter, for some reason Gmail is classifying all email from > ntlworld.com as spam, with the notation that it "can't guarantee that > this message came from ntlworld.com") > > On Tue, May 5, 2020 at 9:48 AM Peter Stephenson > wrote: > > > > > > The problem is if we fopen() the file descriptor to use stdio as output= , > we can either > > leak the entire FILE, not opened by the user, or we can close the entir= e > FILE. > > In that case we should be doing the fopen() on a dup() of the > descriptor, and fclose()ing the FILE. > > If it is important that fileno(xtrerr) =3D=3D $ZSH_XTRACEFD, then we shou= ld > 1) dup() the descriptor to save a copy > 2) fopen() the original > 3) after fclose(), dup2() the copy back to the original > 4) close() the copy > > However, I'm not sure it's necessary to be that convoluted. > --000000000000aebc6d05ae690dab Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello, I'm coming back to the ZSH_XTRACEFD featur= e again :)

About closing file descriptors or not: = I don't understand what it means to "leak a FILE".
= I'm not sure to understand the past comments either: we only use fdopen= when the value of ZSH_XTRACEFD is > 2.
For 0, 1 and 2, we re-= use the existing file descriptors stdin, stdout and stderr.

<= /div>
Anyway, I added the patch in an attachment. Also, here's the = link to the commit on my fork:
<= div>
In this patch, I never close any file descriptor.
<= div>
There's one last thing that looks weird to me:
=
single instructions like ZSH_XTRACEFD=3D5 are not properly logged in t= he xtrace output.
It seems they are truncated up to the end of th= e variable assignment:
- with a=3D0 ZSH_XTRACEFD=3D5, nothing app= ear in the output either
- with ZXH_XTRACEFD=3D5 a=3D0, only a=3D= 0 appears in the output (but no +(eval):18 prefix or similar)
Any idea about this?

Cheers,
Timoth=C3=A9e

On Wed, May 6, 2020 at 12:20 AM Bart Schaefer <= schaefer@brasslantern.com&= gt; wrote:
(Pete= r, for some reason Gmail is classifying all email from
ntlwor= ld.com as spam, with the notation that it "can't guarantee tha= t
this message came from ntlworld.com")

On Tue, May 5, 2020 at 9:48 AM Peter Stephenson
<p.w.st= ephenson@ntlworld.com> wrote:
>
>
> The problem is if we fopen() the file descriptor to use stdio as outpu= t, we can either
> leak the entire FILE, not opened by the user, or we can close the enti= re FILE.

In that case we should be doing the fopen() on a dup() of the
descriptor, and fclose()ing the FILE.

If it is important that fileno(xtrerr) =3D=3D $ZSH_XTRACEFD, then we should=
1) dup() the descriptor to save a copy
2) fopen() the original
3) after fclose(), dup2() the copy back to the original
4) close() the copy

However, I'm not sure it's necessary to be that convoluted.
--000000000000aebc6d05ae690dab-- --000000000000aebc7005ae690dad Content-Type: text/x-patch; charset="US-ASCII"; name="0001-44752-Implement-ZSH_XTRACEFD-feature.patch" Content-Disposition: attachment; filename="0001-44752-Implement-ZSH_XTRACEFD-feature.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kemvb6jf0 RnJvbSBiOWIzNzMzM2ZjZjAyYTQ2M2Y2Zjc0Mjk3NmIzN2I0NWFiMDg3NDJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VGltb3RoPUMzPUE5ZT0yME1henp1Y290ZWxs aT89IDxwYXdhbW95QHBtLm1lPgpEYXRlOiBUaHUsIDMgU2VwIDIwMjAgMTE6Mjc6MTYgKzAyMDAK U3ViamVjdDogW1BBVENIXSA0NDc1MjogSW1wbGVtZW50IFpTSF9YVFJBQ0VGRCBmZWF0dXJlCgot LS0KIFNyYy9leGVjLmMgICAgICAgICAgICB8ICAyICstCiBTcmMvaW5pdC5jICAgICAgICAgICAg fCAgNiArKy0tCiBTcmMvcGFyYW1zLmMgICAgICAgICAgfCA2NiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KIFNyYy91dGlscy5jICAgICAgICAgICB8ICA5ICsrKysr LQogVGVzdC9BMDRyZWRpcmVjdC56dHN0IHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDUgaW5zZXJ0aW9ucygrKSwgNSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9TcmMvZXhlYy5jIGIvU3JjL2V4ZWMuYwppbmRleCBl Y2FkOTIzZGUuLjM2MGRjZTBlZSAxMDA2NDQKLS0tIGEvU3JjL2V4ZWMuYworKysgYi9TcmMvZXhl Yy5jCkBAIC01NDUzLDcgKzU0NTMsNyBAQCBleGVjc2hmdW5jKFNoZnVuYyBzaGYsIExpbmtMaXN0 IGFyZ3MpCiAgICAgY21kc3AgPSAwOwogICAgIGlmICgob3NmYyA9IHNmY29udGV4dCkgPT0gU0ZD X05PTkUpCiAJc2Zjb250ZXh0ID0gU0ZDX0RJUkVDVDsKLSAgICB4dHJlcnIgPSBzdGRlcnI7Cisg ICAgeHRyZXJyID0geHRyYWNlX2ZpbGU7CiAKICAgICBkb3NoZnVuYyhzaGYsIGFyZ3MsIDApOwog CmRpZmYgLS1naXQgYS9TcmMvaW5pdC5jIGIvU3JjL2luaXQuYwppbmRleCAzZDZjOTRkMDQuLjg5 YzUwYjE3ZSAxMDA2NDQKLS0tIGEvU3JjL2luaXQuYworKysgYi9TcmMvaW5pdC5jCkBAIC02MTYs OCArNjE2LDEwIEBAIGluaXRfaW8oY2hhciAqY21kKQogCVNIVFRZID0gLTE7CiAgICAgfQogCi0g ICAgLyogU2VuZCB4dHJhY2Ugb3V0cHV0IHRvIHN0ZGVyciAtLSBzZWUgZXhlY2NtZCgpICovCi0g ICAgeHRyZXJyID0gc3RkZXJyOworICAgIC8qIFNlbmQgeHRyYWNlIG91dHB1dCB0byB6c2hfeHRy YWNlZmQgZmlsZSBkZXNjcmlwdG9yIC0tIHNlZSBleGVjY21kKCkgKi8KKyAgICBpZiAoenNoX3h0 cmFjZWZkID09IDApCisgICAgICAgenNoX3h0cmFjZWZkID0gMjsKKyAgICB4dHJhY2VmZGFzc2ln bigpOwogCiAgICAgLyogTWFrZSBzdXJlIHRoZSB0dHkgaXMgb3BlbmVkIHJlYWQvd3JpdGUuICov CiAgICAgaWYgKGlzYXR0eSgwKSkgewpkaWZmIC0tZ2l0IGEvU3JjL3BhcmFtcy5jIGIvU3JjL3Bh cmFtcy5jCmluZGV4IDEyMmY1ZGE3ZC4uODcyMDhmY2EzIDEwMDY0NAotLS0gYS9TcmMvcGFyYW1z LmMKKysrIGIvU3JjL3BhcmFtcy5jCkBAIC0xMDYsNyArMTA2LDggQEAgemxvbmcgbGFzdHZhbCwJ CS8qICQ/ICAgICAgICAgICAqLwogICAgICB6dGVybV9saW5lcywJLyogJExJTkVTICAgICAgICov CiAgICAgIHJwcm9tcHRfaW5kZW50LAkvKiAkWkxFX1JQUk9NUFRfSU5ERU5UICovCiAgICAgIHBw aWQsCQkvKiAkUFBJRCAgICAgICAgKi8KLSAgICAgenNoX3N1YnNoZWxsOwkvKiAkWlNIX1NVQlNI RUxMICovCisgICAgIHpzaF9zdWJzaGVsbCwJLyogJFpTSF9TVUJTSEVMTCAqLworICAgICB6c2hf eHRyYWNlZmQ7CS8qICRaU0hfWFRSQUNFRkQgKi8KIAogLyogJEZVTkNORVNUICAgICovCiAvKiov CkBAIC0yNjgsNiArMjY5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnc3VfYXJyYXkgcGlwZXN0 YXR1c19nc3UgPQogc3RhdGljIGNvbnN0IHN0cnVjdCBnc3VfaW50ZWdlciBycHJvbXB0X2luZGVu dF9nc3UgPQogeyBpbnR2YXJnZXRmbiwgemxldmFyc2V0Zm4sIHJwcm9tcHRfaW5kZW50X3Vuc2V0 Zm4gfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBnc3VfaW50ZWdlciB4dHJhY2VmZF9nc3UgPQor eyBpbnR2YXJnZXRmbiwgeHRyYWNlZmRzZXRmbiwgeHRyYWNlZmR1bnNldGZuIH07CisKIC8qIE5v ZGVzIGZvciBzcGVjaWFsIHBhcmFtZXRlcnMgZm9yIHBhcmFtZXRlciBoYXNoIHRhYmxlICovCiAK ICNpZmRlZiBIQVZFX1VOSU9OX0lOSVQKQEAgLTM1Nyw2ICszNjEsNyBAQCBJUERFRjUoIkxJTkVT IiwgJnp0ZXJtX2xpbmVzLCB6bGV2YXJfZ3N1KSwKIElQREVGNVUoIlpMRV9SUFJPTVBUX0lOREVO VCIsICZycHJvbXB0X2luZGVudCwgcnByb21wdF9pbmRlbnRfZ3N1KSwKIElQREVGNSgiU0hMVkwi LCAmc2hsdmwsIHZhcmludGVnZXJfZ3N1KSwKIElQREVGNSgiRlVOQ05FU1QiLCAmenNoX2Z1bmNu ZXN0LCB2YXJpbnRlZ2VyX2dzdSksCitJUERFRjUoIlpTSF9YVFJBQ0VGRCIsICZ6c2hfeHRyYWNl ZmQsIHh0cmFjZWZkX2dzdSksCiAKIC8qIERvbid0IGltcG9ydCBpbnRlcm5hbCBpbnRlZ2VyIHN0 YXR1cyB2YXJpYWJsZXMuICovCiAjZGVmaW5lIElQREVGNihBLEIsRikge3tOVUxMLEEsUE1fSU5U RUdFUnxQTV9TUEVDSUFMfFBNX0RPTlRJTVBPUlR9LEJSKCh2b2lkICopQiksR1NVKEYpLDEwLDAs TlVMTCxOVUxMLE5VTEwsMH0KQEAgLTQzOTksNiArNDQwNCw2NSBAQCBzZXRzZWNvbmRzdHlwZShQ YXJhbSBwbSwgaW50IG9uLCBpbnQgb2ZmKQogICAgIHJldHVybiAwOwogfQogCisvKiBPcGVuIC8g YXNzaWduIHRoZSBYVFJBQ0UgZmQgKi8KKworLyoqLwordm9pZCB4dHJhY2VmZGFzc2lnbih2b2lk KQoreworICAgIGludCBmZCA9IChpbnQpenNoX3h0cmFjZWZkOworICAgIHN3aXRjaCAoZmQpCisg ICAgeworICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgIC8qIGJpemFycmUsIGJ1dCBoYW5k bGUgZm9yIGNvbnNpc3RlbmN5ICovCisgICAgICAgeHRyZXJyID0gc3RkaW47CisgICAgICAgYnJl YWs7CisKKyAgICBjYXNlIDE6CisgICAgICAgeHRyZXJyID0gc3Rkb3V0OworICAgICAgIGJyZWFr OworCisgICAgY2FzZSAyOgorICAgICAgIHh0cmVyciA9IHN0ZGVycjsKKyAgICAgICBicmVhazsK KworICAgIGRlZmF1bHQ6CisgICAgICAgeHRyZXJyID0gZmRvcGVuKGZkLCAidyIpOworICAgICAg IGJyZWFrOworICAgIH0KKyAgICB4dHJhY2VfZmlsZSA9IHh0cmVycjsKK30KKworLyogRnVuY3Rp b24gdG8gc2V0IHZhbHVlIG9mIHNwZWNpYWwgcGFyYW1ldGVyIGBaU0hfWFRSQUNFRkQnICovCisK Ky8qKi8KK3ZvaWQKK3h0cmFjZWZkc2V0Zm4oUGFyYW0gcG0sIHpsb25nIGZkKQoreworICAgIC8q IENoZWNrIHRoYXQgdGhlIGdpdmVuIGZpbGUgZGVzY3JpcHRvciBpcyB2YWxpZCAqLworICAgIGlm IChmY250bChmZCwgRl9HRVRGRCkgIT0gLTEgfHwgZXJybm8gIT0gRUJBREYpIHsKKyAgICAgIGlu dHZhcnNldGZuKHBtLCBmZCk7CisgICAgICB4dHJhY2VmZGFzc2lnbigpOworICAgIH0gZWxzZQor ICAgICAgendhcm4oImZpbGUgZGVzY3JpcHRvciAlZCBpcyBub3QgdmFsaWQiLCBmZCk7CisKK30K KworLyogRnVuY3Rpb24gdG8gdW5zZXQgdmFsdWUgb2Ygc3BlY2lhbCBwYXJhbWV0ZXIgYFpTSF9Y VFJBQ0VGRCcgKi8KKworLyoqLwordm9pZAoreHRyYWNlZmR1bnNldGZuKFBhcmFtIHBtLCBVTlVT RUQoaW50IGV4cCkpCit7CisgICAgaW50IGN1cnJlbnRfZmQgPSBpbnR2YXJnZXRmbihwbSk7Cisg ICAgaWYgKGN1cnJlbnRfZmQgPT0gMikgIC8qIE5vdGhpbmcgdG8gZG8sIGFscmVhZHkgdXNpbmcg c3RkZXJyICovCisgICAgICByZXR1cm47CisgICAgZWxzZSB7ICAvKiBSZXNldCB0byBmaWxlIGRl c2NyaXB0b3IgMiAoc3RkZXJyKSAqLworICAgICAgaW50dmFyc2V0Zm4ocG0sIDIpOworICAgIC8v ICAgaWYgKGN1cnJlbnRfZmQgPiAyKQorICAgIC8vICAgICAgZmNsb3NlKHh0cmVycik7ICAvKiBO ZXZlciBjbG9zZSBzdGFuZGFyZCBkZXNjcmlwdG9ycyAqLworICAgICAgeHRyZXJyID0geHRyYWNl X2ZpbGUgPSBzdGRlcnI7CisgICAgfQorfQorCiAvKiBGdW5jdGlvbiB0byBnZXQgdmFsdWUgZm9y IHNwZWNpYWwgcGFyYW1ldGVyIGBVU0VSTkFNRScgKi8KIAogLyoqLwpkaWZmIC0tZ2l0IGEvU3Jj L3V0aWxzLmMgYi9TcmMvdXRpbHMuYwppbmRleCA1MTUxYjg5YTguLmVmZTI4YzljNiAxMDA2NDQK LS0tIGEvU3JjL3V0aWxzLmMKKysrIGIvU3JjL3V0aWxzLmMKQEAgLTE3NjAsMTIgKzE3NjAsMTkg QEAgY2hlY2ttYWlscGF0aChjaGFyICoqcykKIC8qKi8KIEZJTEUgKnh0cmVyciA9IDA7CiAKKy8q IFRoaXMgcmVjb3JkcyB0aGUgbGFzdCBmaWxlIFhUUkFDRSB3YXMgb3BlbiB0b28uCisgKiBJdCdz IHVzZWQgZm9yIHJlc3RvcmluZyBYVFJBQ0UgYWZ0ZXIgYSBwb3NzaWJsZSByZWRpcmVjdGlvbi4K KyAqLworCisvKiovCitGSUxFICp4dHJhY2VfZmlsZTsKKwogLyoqLwogdm9pZAogcHJpbnRwcm9t cHQ0KHZvaWQpCiB7CiAgICAgaWYgKCF4dHJlcnIpCi0JeHRyZXJyID0gc3RkZXJyOworCXh0cmFj ZWZkYXNzaWduKCk7CiAgICAgaWYgKHByb21wdDQpIHsKIAlpbnQgbCwgdCA9IG9wdHNbWFRSQUNF XTsKIAljaGFyICpzID0gZHVwc3RyaW5nKHByb21wdDQpOwpkaWZmIC0tZ2l0IGEvVGVzdC9BMDRy ZWRpcmVjdC56dHN0IGIvVGVzdC9BMDRyZWRpcmVjdC56dHN0CmluZGV4IDk5MzEzOGU3ZC4uMWUz NGQ0OTYxIDEwMDY0NAotLS0gYS9UZXN0L0EwNHJlZGlyZWN0Lnp0c3QKKysrIGIvVGVzdC9BMDRy ZWRpcmVjdC56dHN0CkBAIC03MjIsMyArNzIyLDcwIEBACiA+V29ya3MKID5Xb3JrcwogPyhldmFs KTo2OiBmaWxlIGV4aXN0czogZm9vCisKKyAgcm0gLWYgcmVkaXIKKyAgc2V0IC14CisgIFpTSF9Y VFJBQ0VGRD00IHByaW50ICdUaGlzIGlzIFpTSF9YVFJBQ0VGRCByZWRpcicgND5yZWRpcgorICBz ZXQgK3gKKyAgY2F0IHJlZGlyCiswOlJlZGlyZWN0IHh0cmFjZSBvdXRwdXQgdG8gWlNIX1hUUkFD RUZEIGZpbGUgZGVzY3JpcHRvcgorPlRoaXMgaXMgWlNIX1hUUkFDRUZEIHJlZGlyCis+KyhldmFs KTozPiBwcmludCAnVGhpcyBpcyBaU0hfWFRSQUNFRkQgcmVkaXInCis/KyhldmFsKTozPiBaU0hf WFRSQUNFRkQ9NCArKGV2YWwpOjQ+IHNldCAreAorCisgIHJtIC1mIHJlZGlyCisgIEEoKSB7Cisg ICAgbG9jYWwgWlNIX1hUUkFDRUZEPTUKKyAgICBCCisgICAgcHJpbnQgJ0Z1bmN0aW9uIEEgdG8g ZmlsZSBkZXNjcmlwdG9yIDUnCisgICAgdW5zZXQgWlNIX1hUUkFDRUZECisgICAgcHJpbnQgJ0Z1 bmN0aW9uIEEgdG8gZmlsZSBkZXNjcmlwdG9yIDInCisgIH0KKyAgQigpIHsKKyAgICBsb2NhbCBa U0hfWFRSQUNFRkQ9NgorICAgIHByaW50ICdGdW5jdGlvbiBCIHRvIGZpbGUgZGVzY3JpcHRvciA2 JworICB9CisgIGV4ZWMgND5yZWRpcjQgNT5yZWRpcjUgNj5yZWRpcjYKKyAgWlNIX1hUUkFDRUZE PTQKKyAgc2V0IC14CisgIHByaW50ICdNYWluIHRvIGZpbGUgZGVzY3JpcHRvciA0JworICBBCisg IHByaW50ICdNYWluIHRvIGZpbGUgZGVzY3JpcHRvciA0IGFnYWluXG4nCisgIGE9MCBaU0hfWFRS QUNFRkQ9NSAgIyBhcHBlYXJzIGFzIGJsYW5rIGxpbmUgaW4gcmVkaXI1CisgIFpTSF9YVFJBQ0VG RD02ICAjIGFwcGVhcnMgYXMgYmxhbmsgbGluZSBpbiByZWRpcjYKKyAgdW5zZXQgWlNIX1hUUkFD RUZECisgIHNldCAreAorICBwcmludCAiZW5kIG9mIGZpbGUgcmVkaXI0IiA+PiByZWRpcjQKKyAg Y2F0IHJlZGlyNAorICBwcmludAorICBwcmludCAiZW5kIG9mIGZpbGUgcmVkaXI1IiA+PiByZWRp cjUKKyAgY2F0IHJlZGlyNQorICBwcmludAorICBwcmludCAiZW5kIG9mIGZpbGUgcmVkaXI2IiA+ PiByZWRpcjYKKyAgY2F0IHJlZGlyNgorMDpTY29wZWQgWlNIX1hUUkFDRUZEIGNvcnJlY3RseSBz ZXQgYW5kIHJlc3RvcmVkCis+TWFpbiB0byBmaWxlIGRlc2NyaXB0b3IgNAorPkZ1bmN0aW9uIEIg dG8gZmlsZSBkZXNjcmlwdG9yIDYKKz5GdW5jdGlvbiBBIHRvIGZpbGUgZGVzY3JpcHRvciA1Cis+ RnVuY3Rpb24gQSB0byBmaWxlIGRlc2NyaXB0b3IgMgorPk1haW4gdG8gZmlsZSBkZXNjcmlwdG9y IDQgYWdhaW4KKz4KKz4rKGV2YWwpOjE2PiBwcmludCAnTWFpbiB0byBmaWxlIGRlc2NyaXB0b3Ig NCcKKz4rKGV2YWwpOjE3PiBBCis+K0E6MT4gbG9jYWwgWlNIX1hUUkFDRUZEPTUKKz4rKGV2YWwp OjE4PiBwcmludCAnTWFpbiB0byBmaWxlIGRlc2NyaXB0b3IgNCBhZ2FpblxuJworPmVuZCBvZiBm aWxlIHJlZGlyNAorPgorPitBOjI+IEIKKz4rQjoxPiBsb2NhbCBaU0hfWFRSQUNFRkQ9NgorPitB OjM+IHByaW50ICdGdW5jdGlvbiBBIHRvIGZpbGUgZGVzY3JpcHRvciA1JworPitBOjQ+IHVuc2V0 IFpTSF9YVFJBQ0VGRAorPgorPmVuZCBvZiBmaWxlIHJlZGlyNQorPgorPitCOjI+IHByaW50ICdG dW5jdGlvbiBCIHRvIGZpbGUgZGVzY3JpcHRvciA2JworPgorPisoZXZhbCk6MjE+IHVuc2V0IFpT SF9YVFJBQ0VGRAorPmVuZCBvZiBmaWxlIHJlZGlyNgorPytBOjU+IHByaW50ICdGdW5jdGlvbiBB IHRvIGZpbGUgZGVzY3JpcHRvciAyJworPysoZXZhbCk6MjI+IHNldCAreAotLSAKMi4yOC4wCgo= --000000000000aebc7005ae690dad--