mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-88233: zipfile: refactor _strip_extra (#102084)
* Refactor zipfile._strip_extra to use higher level abstractions for extras instead of a heavy-state loop. * Add blurb * Remove _strip_extra and use _Extra.strip directly. * Use memoryview to avoid unnecessary copies while splitting Extras.
This commit is contained in:
parent
25bb266fc8
commit
e9791ba351
3 changed files with 61 additions and 45 deletions
|
@ -3203,14 +3203,14 @@ class StripExtraTests(unittest.TestCase):
|
|||
b = s.pack(2, 0)
|
||||
c = s.pack(3, 0)
|
||||
|
||||
self.assertEqual(b'', zipfile._strip_extra(a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._strip_extra(b, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b'', zipfile._Extra.strip(a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._Extra.strip(b, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(
|
||||
b+b"z", zipfile._strip_extra(b+b"z", (self.ZIP64_EXTRA,)))
|
||||
b+b"z", zipfile._Extra.strip(b+b"z", (self.ZIP64_EXTRA,)))
|
||||
|
||||
self.assertEqual(b+c, zipfile._strip_extra(a+b+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._strip_extra(b+a+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._strip_extra(b+c+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._Extra.strip(a+b+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._Extra.strip(b+a+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._Extra.strip(b+c+a, (self.ZIP64_EXTRA,)))
|
||||
|
||||
def test_with_data(self):
|
||||
s = struct.Struct("<HH")
|
||||
|
@ -3218,38 +3218,38 @@ class StripExtraTests(unittest.TestCase):
|
|||
b = s.pack(2, 2) + b"bb"
|
||||
c = s.pack(3, 3) + b"ccc"
|
||||
|
||||
self.assertEqual(b"", zipfile._strip_extra(a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._strip_extra(b, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"", zipfile._Extra.strip(a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._Extra.strip(b, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(
|
||||
b+b"z", zipfile._strip_extra(b+b"z", (self.ZIP64_EXTRA,)))
|
||||
b+b"z", zipfile._Extra.strip(b+b"z", (self.ZIP64_EXTRA,)))
|
||||
|
||||
self.assertEqual(b+c, zipfile._strip_extra(a+b+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._strip_extra(b+a+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._strip_extra(b+c+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._Extra.strip(a+b+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._Extra.strip(b+a+c, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b+c, zipfile._Extra.strip(b+c+a, (self.ZIP64_EXTRA,)))
|
||||
|
||||
def test_multiples(self):
|
||||
s = struct.Struct("<HH")
|
||||
a = s.pack(self.ZIP64_EXTRA, 1) + b"a"
|
||||
b = s.pack(2, 2) + b"bb"
|
||||
|
||||
self.assertEqual(b"", zipfile._strip_extra(a+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"", zipfile._strip_extra(a+a+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"", zipfile._Extra.strip(a+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"", zipfile._Extra.strip(a+a+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(
|
||||
b"z", zipfile._strip_extra(a+a+b"z", (self.ZIP64_EXTRA,)))
|
||||
b"z", zipfile._Extra.strip(a+a+b"z", (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(
|
||||
b+b"z", zipfile._strip_extra(a+a+b+b"z", (self.ZIP64_EXTRA,)))
|
||||
b+b"z", zipfile._Extra.strip(a+a+b+b"z", (self.ZIP64_EXTRA,)))
|
||||
|
||||
self.assertEqual(b, zipfile._strip_extra(a+a+b, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._strip_extra(a+b+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._strip_extra(b+a+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._Extra.strip(a+a+b, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._Extra.strip(a+b+a, (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b, zipfile._Extra.strip(b+a+a, (self.ZIP64_EXTRA,)))
|
||||
|
||||
def test_too_short(self):
|
||||
self.assertEqual(b"", zipfile._strip_extra(b"", (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"z", zipfile._strip_extra(b"z", (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"", zipfile._Extra.strip(b"", (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(b"z", zipfile._Extra.strip(b"z", (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(
|
||||
b"zz", zipfile._strip_extra(b"zz", (self.ZIP64_EXTRA,)))
|
||||
b"zz", zipfile._Extra.strip(b"zz", (self.ZIP64_EXTRA,)))
|
||||
self.assertEqual(
|
||||
b"zzz", zipfile._strip_extra(b"zzz", (self.ZIP64_EXTRA,)))
|
||||
b"zzz", zipfile._Extra.strip(b"zzz", (self.ZIP64_EXTRA,)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue