File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -86,6 +86,8 @@ pub struct FrameEncoder<W: io::Write> {
8686 dst : Vec < u8 > ,
8787 /// Whether we have an open frame in the output.
8888 is_frame_open : bool ,
89+ /// Whether we have an frame closed in the output.
90+ data_to_frame_written : bool ,
8991 /// The frame information to be used in this encoder.
9092 frame_info : FrameInfo ,
9193}
@@ -140,6 +142,7 @@ impl<W: io::Write> FrameEncoder<W> {
140142 content_len : 0 ,
141143 dst : Vec :: new ( ) ,
142144 is_frame_open : false ,
145+ data_to_frame_written : false ,
143146 frame_info,
144147 src_start : 0 ,
145148 src_end : 0 ,
@@ -169,8 +172,15 @@ impl<W: io::Write> FrameEncoder<W> {
169172 /// terminator.
170173 pub fn try_finish ( & mut self ) -> Result < ( ) , Error > {
171174 match self . flush ( ) {
172- Ok ( ( ) ) if self . is_frame_open => self . end_frame ( ) ,
173- Ok ( ( ) ) => Ok ( ( ) ) ,
175+ Ok ( ( ) ) => {
176+ // Empty input special case
177+ if !self . is_frame_open && !self . data_to_frame_written {
178+ self . begin_frame ( 0 ) ?;
179+ }
180+ self . end_frame ( ) ?;
181+ self . data_to_frame_written = true ;
182+ Ok ( ( ) )
183+ }
174184 Err ( err) => Err ( err. into ( ) ) ,
175185 }
176186 }
Original file line number Diff line number Diff line change @@ -95,6 +95,7 @@ fn test_roundtrip(bytes: impl AsRef<[u8]>) {
9595 let mut frame_info = lz4_flex:: frame:: FrameInfo :: new ( ) ;
9696 frame_info. block_mode = * bm;
9797 let compressed_flex = lz4_flex_frame_compress_with ( frame_info, bytes) . unwrap ( ) ;
98+ dbg ! ( & compressed_flex) ;
9899 let decompressed = lz4_flex_frame_decompress ( & compressed_flex) . unwrap ( ) ;
99100 assert_eq ! ( decompressed, bytes) ;
100101 }
You can’t perform that action at this time.
0 commit comments