[tor-commits] [meek/master] Have meek-client-torbrowser give meek-client a stdin that doesn't close.

dcf at torproject.org dcf at torproject.org
Fri Feb 16 06:19:08 UTC 2018

commit a47e634f594c26a5e6676bf5de3f0d1d5bb620af
Author: David Fifield <david at bamsoftware.com>
Date:   Thu Jan 11 12:31:02 2018 -0800

    Have meek-client-torbrowser give meek-client a stdin that doesn't close.
    Running meek-client-torbrowser with the environment variable
    TOR_PT_EXIT_ON_STDIN_CLOSE=1 would cause meek-client to exit
    immediately, as it sensed that its stdin was closed.
    meek-client-torbrowser was running the meek-client subprocess with a nil
    Stdin, which causes its stdin to be /dev/null (or NUL on Windows), which
    returns an immediate EOF. So instead, give meek-client an StdinPipe and
    just keep it open. (We could alternatively keep track of it and close it
    when necessary, but that would take further refactoring.)
    The commit where things would have first broken was
    0ec986eb2b4bc23d81e6e8beffd382890f55bfb1 (part of tag 0.28), which
    added TOR_PT_EXIT_ON_STDIN_CLOSE awareness to meek-client. But it was
    not meek-client's fault.
    This bug did not affect any releases of Tor Browser, despite that on
    Windows we unconditionally set TOR_PT_EXIT_ON_STDIN_CLOSE=1 via
    terminateprocess-buffer, because Tor Browser is still using tag 0.25,
    which doesn't have the TOR_PT_EXIT_ON_STDIN_CLOSE change in meek-client.
 meek-client-torbrowser/meek-client-torbrowser.go | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/meek-client-torbrowser/meek-client-torbrowser.go b/meek-client-torbrowser/meek-client-torbrowser.go
index db35080..0064b4b 100644
--- a/meek-client-torbrowser/meek-client-torbrowser.go
+++ b/meek-client-torbrowser/meek-client-torbrowser.go
@@ -268,6 +268,12 @@ func runMeekClient(helperAddr string, meekClientCommandLine []string) (cmd *exec
 	args := meekClientCommandLine[1:]
 	args = append(args, []string{"--helper", helperAddr}...)
 	cmd = exec.Command(meekClientPath, args...)
+	// Give the subprocess a stdin for TOR_PT_EXIT_ON_STDIN_CLOSE purposes.
+	// https://bugs.torproject.org/24642
+	_, err = cmd.StdinPipe()
+	if err != nil {
+		return
+	}
 	cmd.Stdout = os.Stdout
 	cmd.Stderr = os.Stderr
 	log.Printf("running meek-client command %q", cmd.Args)

More information about the tor-commits mailing list