@@ -3424,6 +3424,58 @@ def test_cli_with_metadata_encoding_extract(self):
34243424 for name in self .file_names :
34253425 self .assertIn (name , listing )
34263426
3427+ class StripExtraTests (unittest .TestCase ):
3428+ # Note: all of the "z" 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 ,)))
34273479
34283480if __name__ == "__main__" :
34293481 unittest .main ()
0 commit comments