1
0
Fork 0

Adding upstream version 1.16~pre1.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-21 11:19:49 +01:00
parent abf5fed346
commit fac3395ec1
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
23 changed files with 520 additions and 446 deletions

View file

@ -1,5 +1,5 @@
/* Lziprecover - Data recovery tool for lzip files
Copyright (C) 2009, 2010, 2011, 2012, 2013 Antonio Diaz Diaz.
Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 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
@ -76,6 +76,7 @@ public:
code = 0;
for( int i = 0; i < 5; ++i ) code = (code << 8) | get_byte();
range = 0xFFFFFFFFU;
code &= range; // make sure that first byte is discarded
}
void normalize()
@ -120,12 +121,13 @@ public:
}
}
int decode_tree( Bit_model bm[], const int num_bits )
int decode_tree3( Bit_model bm[] )
{
int symbol = 1;
for( int i = num_bits; i > 0; --i )
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
return symbol - (1 << num_bits);
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
return symbol & 7;
}
int decode_tree6( Bit_model bm[] )
@ -137,7 +139,15 @@ public:
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
return symbol - (1 << 6);
return symbol & 0x3F;
}
int decode_tree8( Bit_model bm[] )
{
int symbol = 1;
while( symbol < 0x100 )
symbol = ( symbol << 1 ) | decode_bit( bm[symbol] );
return symbol & 0xFF;
}
int decode_tree_reversed( Bit_model bm[], const int num_bits )
@ -156,10 +166,9 @@ public:
int decode_tree_reversed4( Bit_model bm[] )
{
int model = 1;
int symbol = 0;
int symbol = decode_bit( bm[model] );
model = (model << 1) + symbol;
int bit = decode_bit( bm[model] );
model = (model << 1) + bit; symbol |= bit;
bit = decode_bit( bm[model] );
model = (model << 1) + bit; symbol |= (bit << 1);
bit = decode_bit( bm[model] );
model = (model << 1) + bit; symbol |= (bit << 2);
@ -171,7 +180,7 @@ public:
{
Bit_model * const bm1 = bm + 0x100;
int symbol = 1;
for( int i = 7; i >= 0; --i )
while( symbol < 0x100 )
{
match_byte <<= 1;
const int match_bit = match_byte & 0x100;
@ -184,18 +193,16 @@ public:
break;
}
}
return symbol - 0x100;
return symbol & 0xFF;
}
int decode_len( Len_model & lm, const int pos_state )
{
if( decode_bit( lm.choice1 ) == 0 )
return decode_tree( lm.bm_low[pos_state], len_low_bits );
return decode_tree3( lm.bm_low[pos_state] );
if( decode_bit( lm.choice2 ) == 0 )
return len_low_symbols +
decode_tree( lm.bm_mid[pos_state], len_mid_bits );
return len_low_symbols + len_mid_symbols +
decode_tree( lm.bm_high, len_high_bits );
return len_low_symbols + decode_tree3( lm.bm_mid[pos_state] );
return len_low_symbols + len_mid_symbols + decode_tree8( lm.bm_high );
}
};
@ -206,7 +213,7 @@ class LZ_decoder
const unsigned long long outend;
unsigned long long partial_data_pos;
Range_decoder & rdec;
const int dictionary_size;
const unsigned dictionary_size;
const int buffer_size;
uint8_t * const buffer; // output buffer
int pos; // current pos in buffer
@ -268,7 +275,7 @@ public:
partial_data_pos( 0 ),
rdec( rde ),
dictionary_size( header.dictionary_size() ),
buffer_size( std::max( 65536, dictionary_size ) ),
buffer_size( std::max( 65536U, dictionary_size ) ),
buffer( new uint8_t[buffer_size] ),
pos( 0 ),
stream_pos( 0 ),