@@ -2,15 +2,15 @@ use crate::{
22 codecs:: DecodeV2 ,
33 core:: util:: { PartialBuffer , WriteBuffer } ,
44} ;
5- use std:: { io:: Result , ops:: ControlFlow } ;
5+ use std:: { io:: Result , ops:: ControlFlow , panic :: AssertUnwindSafe } ;
66
77#[ derive( Debug ) ]
88enum State {
99 Decoding ,
1010 Flushing ,
1111 Done ,
1212 Next ,
13- Error ( std:: io:: Error ) ,
13+ Error ( AssertUnwindSafe < std:: io:: Error > ) ,
1414}
1515
1616#[ derive( Debug ) ]
@@ -55,7 +55,7 @@ impl Decoder {
5555 // ignore the first error, occurs when input is empty
5656 // but we need to run decode to flush
5757 Err ( err) if !first => {
58- self . state = State :: Error ( err) ;
58+ self . state = State :: Error ( AssertUnwindSafe ( err) ) ;
5959 if output. written_len ( ) > 0 {
6060 return ControlFlow :: Break ( Ok ( ( ) ) ) ;
6161 } else {
@@ -73,7 +73,7 @@ impl Decoder {
7373 Ok ( true ) => {
7474 if self . multiple_members {
7575 if let Err ( err) = decoder. reinit ( ) {
76- self . state = State :: Error ( err) ;
76+ self . state = State :: Error ( AssertUnwindSafe ( err) ) ;
7777 if output. written_len ( ) > 0 {
7878 return ControlFlow :: Break ( Ok ( ( ) ) ) ;
7979 } else {
@@ -91,7 +91,7 @@ impl Decoder {
9191 }
9292 Ok ( false ) => State :: Flushing ,
9393 Err ( err) => {
94- self . state = State :: Error ( err) ;
94+ self . state = State :: Error ( AssertUnwindSafe ( err) ) ;
9595 if output. written_len ( ) > 0 {
9696 return ControlFlow :: Break ( Ok ( ( ) ) ) ;
9797 } else {
@@ -119,7 +119,7 @@ impl Decoder {
119119 let State :: Error ( err) = std:: mem:: replace ( & mut self . state , State :: Done ) else {
120120 unreachable ! ( )
121121 } ;
122- return ControlFlow :: Break ( Err ( err) ) ;
122+ return ControlFlow :: Break ( Err ( err. 0 ) ) ;
123123 }
124124 } ;
125125
0 commit comments