@@ -3010,5 +3010,67 @@ def test_cli_with_metadata_encoding_extract(self):
3010
3010
self .assertIn (name , listing )
3011
3011
3012
3012
3013
+ class StripExtraTests (unittest .TestCase ):
3014
+ # Note: all of the "z" characters are technically invalid, but up
3015
+ # to 3 bytes at the end of the extra will be passed through as they
3016
+ # are too short to encode a valid extra.
3017
+
3018
+ ZIP64_EXTRA = 1
3019
+
3020
+ def test_no_data (self ):
3021
+ s = struct .Struct ("<HH" )
3022
+ a = s .pack (self .ZIP64_EXTRA , 0 )
3023
+ b = s .pack (2 , 0 )
3024
+ c = s .pack (3 , 0 )
3025
+
3026
+ self .assertEqual (b'' , zipfile ._strip_extra (a , (self .ZIP64_EXTRA ,)))
3027
+ self .assertEqual (b , zipfile ._strip_extra (b , (self .ZIP64_EXTRA ,)))
3028
+ self .assertEqual (
3029
+ b + b"z" , zipfile ._strip_extra (b + b"z" , (self .ZIP64_EXTRA ,)))
3030
+
3031
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (self .ZIP64_EXTRA ,)))
3032
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (self .ZIP64_EXTRA ,)))
3033
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (self .ZIP64_EXTRA ,)))
3034
+
3035
+ def test_with_data (self ):
3036
+ s = struct .Struct ("<HH" )
3037
+ a = s .pack (self .ZIP64_EXTRA , 1 ) + b"a"
3038
+ b = s .pack (2 , 2 ) + b"bb"
3039
+ c = s .pack (3 , 3 ) + b"ccc"
3040
+
3041
+ self .assertEqual (b"" , zipfile ._strip_extra (a , (self .ZIP64_EXTRA ,)))
3042
+ self .assertEqual (b , zipfile ._strip_extra (b , (self .ZIP64_EXTRA ,)))
3043
+ self .assertEqual (
3044
+ b + b"z" , zipfile ._strip_extra (b + b"z" , (self .ZIP64_EXTRA ,)))
3045
+
3046
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (self .ZIP64_EXTRA ,)))
3047
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (self .ZIP64_EXTRA ,)))
3048
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (self .ZIP64_EXTRA ,)))
3049
+
3050
+ def test_multiples (self ):
3051
+ s = struct .Struct ("<HH" )
3052
+ a = s .pack (self .ZIP64_EXTRA , 1 ) + b"a"
3053
+ b = s .pack (2 , 2 ) + b"bb"
3054
+
3055
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a , (self .ZIP64_EXTRA ,)))
3056
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a + a , (self .ZIP64_EXTRA ,)))
3057
+ self .assertEqual (
3058
+ b"z" , zipfile ._strip_extra (a + a + b"z" , (self .ZIP64_EXTRA ,)))
3059
+ self .assertEqual (
3060
+ b + b"z" , zipfile ._strip_extra (a + a + b + b"z" , (self .ZIP64_EXTRA ,)))
3061
+
3062
+ self .assertEqual (b , zipfile ._strip_extra (a + a + b , (self .ZIP64_EXTRA ,)))
3063
+ self .assertEqual (b , zipfile ._strip_extra (a + b + a , (self .ZIP64_EXTRA ,)))
3064
+ self .assertEqual (b , zipfile ._strip_extra (b + a + a , (self .ZIP64_EXTRA ,)))
3065
+
3066
+ def test_too_short (self ):
3067
+ self .assertEqual (b"" , zipfile ._strip_extra (b"" , (self .ZIP64_EXTRA ,)))
3068
+ self .assertEqual (b"z" , zipfile ._strip_extra (b"z" , (self .ZIP64_EXTRA ,)))
3069
+ self .assertEqual (
3070
+ b"zz" , zipfile ._strip_extra (b"zz" , (self .ZIP64_EXTRA ,)))
3071
+ self .assertEqual (
3072
+ b"zzz" , zipfile ._strip_extra (b"zzz" , (self .ZIP64_EXTRA ,)))
3073
+
3074
+
3013
3075
if __name__ == "__main__" :
3014
3076
unittest .main ()
0 commit comments