Fix regressions in Subversion path normalization.
Review Request #11040 — Created June 10, 2020 and submitted
We recently fixed a long-standing bug with Subversion path
normalization, allowing some characters that weren't previously
supported to be properly escaped. However, this turned up some
regressions with Subversion 1.9 and older.
Subversion is very particular about which characters (with ASCII values
0 through 128) that must be escaped and which must not be. This doesn't
directly map to what
urllib.quote()would normally escape.
Fortunately, it allows us to supplement the list of "safe" characters.
This change adds that list of safe characters based on the lookup table
in Subversion's code, and introduces new unit tests for comparing a URL
for the full 0-128 characters to the output that would be escaped using
exactly Subversion's table. It also runs a file existence check using
the same string, helping us ensure that we won't crash Subversion in CI
with an assertion check.
Tested this in a CI environment against Subversion 1.9, where the
crash was noticed. Unit tests passed.