Work around a Windows escaping issue and security conecern in "hg cat --output ..."
Work around a Windows escaping issue and security conecern in "hg cat --output ..."

Summary:
See PHI904. Ref T13210. Ref T13209. Currently, we have an `hg cat` construction which attempts to pass a literal `%p` to Mercurial. This fails because you can't pass `%` through `%s` outside of `wilds`.

It also uses `%C` to pass a list of file paths. This is broadly unsafe and can cause command execution if you modify a file named, e.g., `; rm -rf xyz` or similar. I think it would be difficult to turn this into an attack but it's fairly bad. This dates from D5144 in 2013.

Test Plan: With this patch, created D19757 which has valid binary data (see F5962134).

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13210, T13209

Differential Revision: https://secure.phabricator.com/D19758

uber/arcanist,Khan/arcanist,codelabs-ch/arcanist,uber/arcanist,aik099/arcanist,Khan/arcanist,phacility/arcanist,codelabs-ch/arcanist,phacility/arcanist,codelabs-ch/arcanist,uber/arcanist,aik099/arcanist,phacility/arcanist,codelabs-ch/arcanist,phacility/arcanist,Khan/arcanist,codelabs-ch/arcanist,aik099/arcanist,Khan/arcanist,uber/arcanist,aik099/arcanist,phacility/arcanist