diff options
author | Michał Górny <mgorny@gentoo.org> | 2017-11-23 22:02:56 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2017-11-23 22:02:56 +0100 |
commit | cab7cf080fced108efc1ec8e7e8f7470987fde70 (patch) | |
tree | 954f271c4d63c36338bc0437f2435f0d08f25263 | |
parent | 6583192fdcaf16d4e6209ced0d9d02a1328425c7 (diff) | |
download | gemato-cab7cf080fced108efc1ec8e7e8f7470987fde70.tar.gz |
manifest: Encode all C0/C1 control characters + DEL
-rw-r--r-- | gemato/manifest.py | 2 | ||||
-rw-r--r-- | tests/test_manifest.py | 41 |
2 files changed, 42 insertions, 1 deletions
diff --git a/gemato/manifest.py b/gemato/manifest.py index 61ff72f..37d5288 100644 --- a/gemato/manifest.py +++ b/gemato/manifest.py @@ -60,7 +60,7 @@ class ManifestPathEntry(object): """ __slots__ = ['path'] - disallowed_path_re = re.compile(r'[\0\s\\]', re.U) + disallowed_path_re = re.compile(r'[\x00-\x1F\x7F-\x9F\s\\]', re.U) escape_seq_re = re.compile(r'\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})?') def __init__(self, path): diff --git a/tests/test_manifest.py b/tests/test_manifest.py index c327521..fe1a060 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -465,6 +465,27 @@ class ManifestPathEncodingTest(unittest.TestCase): self.assertListEqual(list(m.to_list()), ['DATA', 'tes\\x00t', '32']) + def test_encode_bell_in_filename(self): + m = gemato.manifest.new_manifest_entry('DATA', + 'tes\at', 32, {}) + self.assertEqual(m.path, 'tes\at') + self.assertListEqual(list(m.to_list()), + ['DATA', 'tes\\x07t', '32']) + + def test_encode_del_in_filename(self): + m = gemato.manifest.new_manifest_entry('DATA', + 'tes\x7Ft', 32, {}) + self.assertEqual(m.path, 'tes\x7Ft') + self.assertListEqual(list(m.to_list()), + ['DATA', 'tes\\x7Ft', '32']) + + def test_encode_pad_in_filename(self): + m = gemato.manifest.new_manifest_entry('DATA', + u'tes\u0080t', 32, {}) + self.assertEqual(m.path, u'tes\u0080t') + self.assertListEqual(list(m.to_list()), + ['DATA', 'tes\\u0080t', '32']) + def test_encode_backslash_in_filename(self): m = gemato.manifest.new_manifest_entry('DATA', 'tes\\t', 32, {}) @@ -512,6 +533,26 @@ class ManifestPathEncodingTest(unittest.TestCase): 'tes\\x00t', 32]) self.assertEqual(m.path, 'tes\x00t') + def test_decode_bell_in_filename(self): + m = gemato.manifest.ManifestEntryDATA.from_list(['DATA', + 'tes\\x07t', 32]) + self.assertEqual(m.path, 'tes\at') + + def test_decode_del_in_filename(self): + m = gemato.manifest.ManifestEntryDATA.from_list(['DATA', + 'tes\\x7Ft', 32]) + self.assertEqual(m.path, 'tes\x7Ft') + + def test_decode_del_in_filename_lc(self): + m = gemato.manifest.ManifestEntryDATA.from_list(['DATA', + 'tes\\x7ft', 32]) + self.assertEqual(m.path, 'tes\x7Ft') + + def test_decode_pad_in_filename(self): + m = gemato.manifest.ManifestEntryDATA.from_list(['DATA', + 'tes\\u0080t', 32]) + self.assertEqual(m.path, u'tes\u0080t') + def test_decode_backslash_in_filename(self): m = gemato.manifest.ManifestEntryDATA.from_list(['DATA', 'tes\\x5Ct', 32]) |