summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-11-23 22:02:56 +0100
committerMichał Górny <mgorny@gentoo.org>2017-11-23 22:02:56 +0100
commitcab7cf080fced108efc1ec8e7e8f7470987fde70 (patch)
tree954f271c4d63c36338bc0437f2435f0d08f25263
parent6583192fdcaf16d4e6209ced0d9d02a1328425c7 (diff)
downloadgemato-cab7cf080fced108efc1ec8e7e8f7470987fde70.tar.gz
manifest: Encode all C0/C1 control characters + DEL
-rw-r--r--gemato/manifest.py2
-rw-r--r--tests/test_manifest.py41
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])