@@ -3425,6 +3425,58 @@ def test_cli_with_metadata_encoding_extract(self):
34253425for name in self .file_names :
34263426self .assertIn (name ,listing )
34273427
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 ,)))
34283480
34293481if __name__ == "__main__" :
34303482unittest .main ()