@@ -3485,5 +3485,67 @@ def test_cli_with_metadata_encoding_extract(self):
3485
3485
self .assertIn (name , listing )
3486
3486
3487
3487
3488
+ class StripExtraTests (unittest .TestCase ):
3489
+ # Note: all of the "z" characters are technically invalid, but up
3490
+ # to 3 bytes at the end of the extra will be passed through as they
3491
+ # are too short to encode a valid extra.
3492
+
3493
+ ZIP64_EXTRA = 1
3494
+
3495
+ def test_no_data (self ):
3496
+ s = struct .Struct ("<HH" )
3497
+ a = s .pack (self .ZIP64_EXTRA , 0 )
3498
+ b = s .pack (2 , 0 )
3499
+ c = s .pack (3 , 0 )
3500
+
3501
+ self .assertEqual (b'' , zipfile ._strip_extra (a , (self .ZIP64_EXTRA ,)))
3502
+ self .assertEqual (b , zipfile ._strip_extra (b , (self .ZIP64_EXTRA ,)))
3503
+ self .assertEqual (
3504
+ b + b"z" , zipfile ._strip_extra (b + b"z" , (self .ZIP64_EXTRA ,)))
3505
+
3506
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (self .ZIP64_EXTRA ,)))
3507
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (self .ZIP64_EXTRA ,)))
3508
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (self .ZIP64_EXTRA ,)))
3509
+
3510
+ def test_with_data (self ):
3511
+ s = struct .Struct ("<HH" )
3512
+ a = s .pack (self .ZIP64_EXTRA , 1 ) + b"a"
3513
+ b = s .pack (2 , 2 ) + b"bb"
3514
+ c = s .pack (3 , 3 ) + b"ccc"
3515
+
3516
+ self .assertEqual (b"" , zipfile ._strip_extra (a , (self .ZIP64_EXTRA ,)))
3517
+ self .assertEqual (b , zipfile ._strip_extra (b , (self .ZIP64_EXTRA ,)))
3518
+ self .assertEqual (
3519
+ b + b"z" , zipfile ._strip_extra (b + b"z" , (self .ZIP64_EXTRA ,)))
3520
+
3521
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (self .ZIP64_EXTRA ,)))
3522
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (self .ZIP64_EXTRA ,)))
3523
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (self .ZIP64_EXTRA ,)))
3524
+
3525
+ def test_multiples (self ):
3526
+ s = struct .Struct ("<HH" )
3527
+ a = s .pack (self .ZIP64_EXTRA , 1 ) + b"a"
3528
+ b = s .pack (2 , 2 ) + b"bb"
3529
+
3530
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a , (self .ZIP64_EXTRA ,)))
3531
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a + a , (self .ZIP64_EXTRA ,)))
3532
+ self .assertEqual (
3533
+ b"z" , zipfile ._strip_extra (a + a + b"z" , (self .ZIP64_EXTRA ,)))
3534
+ self .assertEqual (
3535
+ b + b"z" , zipfile ._strip_extra (a + a + b + b"z" , (self .ZIP64_EXTRA ,)))
3536
+
3537
+ self .assertEqual (b , zipfile ._strip_extra (a + a + b , (self .ZIP64_EXTRA ,)))
3538
+ self .assertEqual (b , zipfile ._strip_extra (a + b + a , (self .ZIP64_EXTRA ,)))
3539
+ self .assertEqual (b , zipfile ._strip_extra (b + a + a , (self .ZIP64_EXTRA ,)))
3540
+
3541
+ def test_too_short (self ):
3542
+ self .assertEqual (b"" , zipfile ._strip_extra (b"" , (self .ZIP64_EXTRA ,)))
3543
+ self .assertEqual (b"z" , zipfile ._strip_extra (b"z" , (self .ZIP64_EXTRA ,)))
3544
+ self .assertEqual (
3545
+ b"zz" , zipfile ._strip_extra (b"zz" , (self .ZIP64_EXTRA ,)))
3546
+ self .assertEqual (
3547
+ b"zzz" , zipfile ._strip_extra (b"zzz" , (self .ZIP64_EXTRA ,)))
3548
+
3549
+
3488
3550
if __name__ == "__main__" :
3489
3551
unittest .main ()
0 commit comments