Page MenuHomePhabricator

When recent PHP raises a "broken pipe" error in ExecFuture, treat it as a blocked stdin

Authored by epriestley on May 1 2020, 2:10 PM.



Ref T13528. If we start a subprocess that immediately exits and then write to it, we can get a broken pipe error.

Recent versions of PHP appear to raise this as an actual warning, and recent changes upgrade the warning to a runtime exception.

I can't find any way to tell if the RuntimeException is a broken pipe or something else, except by examining the text of the error string.

At least for now, treat this like a "blocked pipe" condition. Since the subprocess has exited and the bytes didn't write, this should generally be reasonable.

Test Plan
  • Viewed a file in Paste with an extension that Pygments does not have a lexer for.
  • This causes Pygments to exit immediately with an "unrecognized lexer" error. This closes the pipe, and the next write will fail with a broken pipe error.
  • Before patch: fatal on broken pipe.
  • After patch: clean resolution of the future and error condition.

Diff Detail

rARC Arcanist
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

This revision was not accepted when it landed; it landed in state Needs Review.May 1 2020, 4:12 PM
This revision was automatically updated to reflect the committed changes.