@@ -3210,5 +3210,67 @@ def test_inheritance(self, alpharep):
3210
3210
assert isinstance (file , cls )
3211
3211
3212
3212
3213
+ class StripExtraTests (unittest .TestCase ):
3214
+ # Note: all of the "z" characters are technically invalid, but up
3215
+ # to 3 bytes at the end of the extra will be passed through as they
3216
+ # are too short to encode a valid extra.
3217
+
3218
+ ZIP64_EXTRA = 1
3219
+
3220
+ def test_no_data (self ):
3221
+ s = struct .Struct ("<HH" )
3222
+ a = s .pack (self .ZIP64_EXTRA , 0 )
3223
+ b = s .pack (2 , 0 )
3224
+ c = s .pack (3 , 0 )
3225
+
3226
+ self .assertEqual (b'' , zipfile ._strip_extra (a , (self .ZIP64_EXTRA ,)))
3227
+ self .assertEqual (b , zipfile ._strip_extra (b , (self .ZIP64_EXTRA ,)))
3228
+ self .assertEqual (
3229
+ b + b"z" , zipfile ._strip_extra (b + b"z" , (self .ZIP64_EXTRA ,)))
3230
+
3231
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (self .ZIP64_EXTRA ,)))
3232
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (self .ZIP64_EXTRA ,)))
3233
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (self .ZIP64_EXTRA ,)))
3234
+
3235
+ def test_with_data (self ):
3236
+ s = struct .Struct ("<HH" )
3237
+ a = s .pack (self .ZIP64_EXTRA , 1 ) + b"a"
3238
+ b = s .pack (2 , 2 ) + b"bb"
3239
+ c = s .pack (3 , 3 ) + b"ccc"
3240
+
3241
+ self .assertEqual (b"" , zipfile ._strip_extra (a , (self .ZIP64_EXTRA ,)))
3242
+ self .assertEqual (b , zipfile ._strip_extra (b , (self .ZIP64_EXTRA ,)))
3243
+ self .assertEqual (
3244
+ b + b"z" , zipfile ._strip_extra (b + b"z" , (self .ZIP64_EXTRA ,)))
3245
+
3246
+ self .assertEqual (b + c , zipfile ._strip_extra (a + b + c , (self .ZIP64_EXTRA ,)))
3247
+ self .assertEqual (b + c , zipfile ._strip_extra (b + a + c , (self .ZIP64_EXTRA ,)))
3248
+ self .assertEqual (b + c , zipfile ._strip_extra (b + c + a , (self .ZIP64_EXTRA ,)))
3249
+
3250
+ def test_multiples (self ):
3251
+ s = struct .Struct ("<HH" )
3252
+ a = s .pack (self .ZIP64_EXTRA , 1 ) + b"a"
3253
+ b = s .pack (2 , 2 ) + b"bb"
3254
+
3255
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a , (self .ZIP64_EXTRA ,)))
3256
+ self .assertEqual (b"" , zipfile ._strip_extra (a + a + a , (self .ZIP64_EXTRA ,)))
3257
+ self .assertEqual (
3258
+ b"z" , zipfile ._strip_extra (a + a + b"z" , (self .ZIP64_EXTRA ,)))
3259
+ self .assertEqual (
3260
+ b + b"z" , zipfile ._strip_extra (a + a + b + b"z" , (self .ZIP64_EXTRA ,)))
3261
+
3262
+ self .assertEqual (b , zipfile ._strip_extra (a + a + b , (self .ZIP64_EXTRA ,)))
3263
+ self .assertEqual (b , zipfile ._strip_extra (a + b + a , (self .ZIP64_EXTRA ,)))
3264
+ self .assertEqual (b , zipfile ._strip_extra (b + a + a , (self .ZIP64_EXTRA ,)))
3265
+
3266
+ def test_too_short (self ):
3267
+ self .assertEqual (b"" , zipfile ._strip_extra (b"" , (self .ZIP64_EXTRA ,)))
3268
+ self .assertEqual (b"z" , zipfile ._strip_extra (b"z" , (self .ZIP64_EXTRA ,)))
3269
+ self .assertEqual (
3270
+ b"zz" , zipfile ._strip_extra (b"zz" , (self .ZIP64_EXTRA ,)))
3271
+ self .assertEqual (
3272
+ b"zzz" , zipfile ._strip_extra (b"zzz" , (self .ZIP64_EXTRA ,)))
3273
+
3274
+
3213
3275
if __name__ == "__main__" :
3214
3276
unittest .main ()
0 commit comments