@@ -385,14 +385,13 @@ mod _lzma {
385385 Ok ( filters)
386386 }
387387
388- // lzma_encoder_presets.c
389- const DEFAULT_LC : u32 = 3 ;
390- const DEFAULT_LP : u32 = 0 ;
391- const DEFAULT_PB : u32 = 2 ;
388+ const DEFAULT_LC : u32 = liblzma_sys:: LZMA_LC_DEFAULT ;
389+ const DEFAULT_LP : u32 = liblzma_sys:: LZMA_LP_DEFAULT ;
390+ const DEFAULT_PB : u32 = liblzma_sys:: LZMA_PB_DEFAULT ;
392391 const DICT_POW2 : [ u8 ; 10 ] = [ 18 , 20 , 21 , 22 , 22 , 23 , 23 , 24 , 25 , 26 ] ;
393392
394393 fn preset_dict_size ( preset : u32 ) -> u32 {
395- let level = ( preset & 0x1F ) as usize ;
394+ let level = ( preset & liblzma_sys :: LZMA_PRESET_LEVEL_MASK ) as usize ;
396395 if level > 9 {
397396 return 0 ;
398397 }
@@ -460,24 +459,28 @@ mod _lzma {
460459 dict. set_item ( "dict_size" , vm. new_pyobj ( dict_size) , vm) ?;
461460 }
462461 FILTER_LZMA2 => {
463- if props. is_empty ( ) {
462+ if props. len ( ) != 1 {
464463 return Err ( new_lzma_error ( "Invalid or unsupported options" , vm) ) ;
465464 }
466465 let dict_size = lzma2_dict_size_from_prop ( props[ 0 ] ) ;
467466 dict. set_item ( "dict_size" , vm. new_pyobj ( dict_size) , vm) ?;
468467 }
469468 FILTER_DELTA => {
470- if props. is_empty ( ) {
469+ if props. len ( ) != 1 {
471470 return Err ( new_lzma_error ( "Invalid or unsupported options" , vm) ) ;
472471 }
473472 let dist = props[ 0 ] as u32 + 1 ;
474473 dict. set_item ( "dist" , vm. new_pyobj ( dist) , vm) ?;
475474 }
476475 FILTER_X86 | FILTER_POWERPC | FILTER_IA64 | FILTER_ARM | FILTER_ARMTHUMB
477476 | FILTER_SPARC => {
478- if props. len ( ) == 4 {
477+ if props. is_empty ( ) {
478+ // default: no start_offset
479+ } else if props. len ( ) == 4 {
479480 let start_offset = u32:: from_le_bytes ( [ props[ 0 ] , props[ 1 ] , props[ 2 ] , props[ 3 ] ] ) ;
480481 dict. set_item ( "start_offset" , vm. new_pyobj ( start_offset) , vm) ?;
482+ } else {
483+ return Err ( new_lzma_error ( "Invalid or unsupported options" , vm) ) ;
481484 }
482485 }
483486 _ => {
0 commit comments