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