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