@@ -3425,6 +3425,58 @@ def test_cli_with_metadata_encoding_extract(self):
3425
3425
for name in self .file_names :
3426
3426
self .assertIn (name , listing )
3427
3427
3428
+ class StripExtraTests (unittest .TestCase ):
3429
+ # Note: all of the "z" characters are technically invalid, but up to 3 bytes
3430
+ # at the end of the extra will be passed through as they are too short to
3431
+ # encode a valid extra.
3432
+ def test_no_data (self ):
3433
+ s = struct .Struct ("<HH" )
3434
+ a = s .pack (1 , 0 ) # 1=zip64 exta signature
3435
+ b = s .pack (2 , 0 )
3436
+ c = s .pack (3 , 0 )
3437
+
3438
+ self .assertEqual (b'' , zipfile ._strip_extra (a , (1 ,)))
3439
+ self .assertEqual (b , zipfile ._strip_extra (b , (1 ,)))
3440
+ self .assertEqual (b + b"z" , zipfile ._strip_extra (b + b"z" , (1 ,)))
3441
+
3442
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (1 ,)))
3443
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (1 ,)))
3444
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (1 ,)))
3445
+
3446
+ def test_with_data (self ):
3447
+ s = struct .Struct ("<HH" )
3448
+ a = s .pack (1 , 1 ) + b"a" # 1=zip64 exta signature
3449
+ b = s .pack (2 , 2 ) + b"bb"
3450
+ c = s .pack (3 , 3 ) + b"ccc"
3451
+
3452
+ self .assertEqual (b"" , zipfile ._strip_extra (a , (1 ,)))
3453
+ self .assertEqual (b , zipfile ._strip_extra (b , (1 ,)))
3454
+ self .assertEqual (b + b"z" , zipfile ._strip_extra (b + b"z" , (1 ,)))
3455
+
3456
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (1 ,)))
3457
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (1 ,)))
3458
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (1 ,)))
3459
+
3460
+ def test_multiples (self ):
3461
+ s = struct .Struct ("<HH" )
3462
+ a = s .pack (1 , 1 ) + b"a" # 1=zip64 exta signature
3463
+ b = s .pack (2 , 2 ) + b"bb"
3464
+ c = s .pack (3 , 3 ) + b"ccc"
3465
+
3466
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a , (1 ,)))
3467
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a + a , (1 ,)))
3468
+ self .assertEqual (b"z" , zipfile ._strip_extra (a + a + b"z" , (1 ,)))
3469
+ self .assertEqual (b + b"z" , zipfile ._strip_extra (a + a + b + b"z" , (1 ,)))
3470
+
3471
+ self .assertEqual (b , zipfile ._strip_extra (a + a + b , (1 ,)))
3472
+ self .assertEqual (b , zipfile ._strip_extra (a + b + a , (1 ,)))
3473
+ self .assertEqual (b , zipfile ._strip_extra (b + a + a , (1 ,)))
3474
+
3475
+ def test_too_short (self ):
3476
+ self .assertEqual (b"" , zipfile ._strip_extra (b"" , (1 ,)))
3477
+ self .assertEqual (b"z" , zipfile ._strip_extra (b"z" , (1 ,)))
3478
+ self .assertEqual (b"zz" , zipfile ._strip_extra (b"zz" , (1 ,)))
3479
+ self .assertEqual (b"zzz" , zipfile ._strip_extra (b"zzz" , (1 ,)))
3428
3480
3429
3481
if __name__ == "__main__" :
3430
3482
unittest .main ()
0 commit comments