2a387b17c5
In Perl, setting $/ sets the string that is used as the "record separator," which sets the boundary that the `<>` construct reads to. Setting `local $/ = 0666;` evaluates the octal, getting 438, and stringifies it. Thus, the later read from `<CHLD_OUT>` stops as soon as it encounters the string "438" in the watchman output, yielding invalid JSON; repositories containing filenames with SHA1 hashes are able to trip this easily. Set `$/` to undefined, thus slurping all output from watchman. Also close STDIN which is provided to watchman, to better guarantee that we cannot deadlock with watchman while both attempting to read. Signed-off-by: Alex Vandiver <alexmv@dropbox.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> |
||
---|---|---|
.. | ||
.gitignore | ||
branches-- | ||
hooks--applypatch-msg.sample | ||
hooks--commit-msg.sample | ||
hooks--fsmonitor-watchman.sample | ||
hooks--post-update.sample | ||
hooks--pre-applypatch.sample | ||
hooks--pre-commit.sample | ||
hooks--pre-push.sample | ||
hooks--pre-rebase.sample | ||
hooks--pre-receive.sample | ||
hooks--prepare-commit-msg.sample | ||
hooks--update.sample | ||
info--exclude | ||
Makefile | ||
this--description |