Merging upstream version 0.24.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
b3a4316df0
commit
d842f57fc5
33 changed files with 905 additions and 882 deletions
|
@ -1,5 +1,5 @@
|
|||
/* Tarlz - Archiver with multimember lzip compression
|
||||
Copyright (C) 2013-2022 Antonio Diaz Diaz.
|
||||
Copyright (C) 2013-2023 Antonio Diaz Diaz.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -90,7 +90,7 @@ int Archive_reader_base::parse_records( Extended & extended,
|
|||
const long long edsize = parse_octal( header + size_o, size_l );
|
||||
const long long bufsize = round_up( edsize );
|
||||
if( edsize <= 0 ) return err( 2, misrec_msg ); // no extended records
|
||||
if( edsize >= 1LL << 33 || bufsize >= INT_MAX )
|
||||
if( edsize >= 1LL << 33 || bufsize > max_edata_size )
|
||||
return err( -2, longrec_msg ); // records too long
|
||||
if( !rbuf.resize( bufsize ) ) return err( -1, mem_msg );
|
||||
e_msg_ = ""; e_code_ = 0;
|
||||
|
@ -116,10 +116,10 @@ int Archive_reader::read( uint8_t * const buf, const int size )
|
|||
const int rd = readblock( ad.infd, buf, size );
|
||||
if( rd != size && errno ) return err( -1, rdaerr_msg, errno, rd );
|
||||
const Lzip_header & header = (*(const Lzip_header *)buf);
|
||||
const bool islz = ( rd >= min_member_size && header.verify_magic() &&
|
||||
header.verify_version() &&
|
||||
const bool islz = ( rd >= min_member_size && header.check_magic() &&
|
||||
header.check_version() &&
|
||||
isvalid_ds( header.dictionary_size() ) );
|
||||
const bool istar = ( rd == size && verify_ustar_chksum( buf ) );
|
||||
const bool istar = ( rd == size && check_ustar_chksum( buf ) );
|
||||
const bool iseoa =
|
||||
( !islz && !istar && rd == size && block_is_zero( buf, size ) );
|
||||
bool maybe_lz = islz; // maybe corrupt tar.lz
|
||||
|
@ -139,7 +139,7 @@ int Archive_reader::read( uint8_t * const buf, const int size )
|
|||
{ LZ_decompress_close( decoder ); decoder = 0; return err( -1, mem_msg ); }
|
||||
xLZ_decompress_write( decoder, buf, rd );
|
||||
const int ret = read( buf, size ); if( ret != 0 ) return ret;
|
||||
if( verify_ustar_chksum( buf ) || block_is_zero( buf, size ) ) return 0;
|
||||
if( check_ustar_chksum( buf ) || block_is_zero( buf, size ) ) return 0;
|
||||
return err( 2, islz ? posix_lz_msg : "" );
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue