@@ -2542,6 +2542,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
25422542 struct zip * zip = (struct zip * )(a -> format -> data );
25432543 ssize_t bytes_avail = 0 , in_bytes , to_consume ;
25442544 const void * compressed_buff ;
2545+ const void * sp ;
25452546 int r ;
25462547 uint64_t total_out ;
25472548
@@ -2574,6 +2575,9 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
25742575 return (ARCHIVE_FATAL );
25752576 }
25762577
2578+ zip_read_decrypt (zip , compressed_buff , in_bytes ,
2579+ & compressed_buff , & in_bytes , & sp );
2580+
25772581 /* Setup buffer boundaries. */
25782582 zip -> bzstream .next_in = (char * )(uintptr_t ) compressed_buff ;
25792583 zip -> bzstream .avail_in = (uint32_t )in_bytes ;
@@ -2624,6 +2628,14 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
26242628 zip -> entry_compressed_bytes_read += to_consume ;
26252629 zip -> entry_uncompressed_bytes_read += total_out ;
26262630
2631+ zip_read_decrypt_update (zip , to_consume , sp );
2632+
2633+ if (zip -> end_of_entry && zip -> hctx_valid ) {
2634+ r = check_authentication_code (a , NULL );
2635+ if (r != ARCHIVE_OK )
2636+ return r ;
2637+ }
2638+
26272639 /* Give libarchive its due. */
26282640 * size = (size_t )total_out ;
26292641 * buff = zip -> uncompressed_buffer ;
0 commit comments