From 29bb9d4ca8dc96075b1feed443029fc6c427c366 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:24:07 +1100 Subject: [PATCH 1/4] Fix unwind safety auto-trait impl in generic::bufread::Encoder Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- .../src/generic/bufread/encoder.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/async-compression/src/generic/bufread/encoder.rs b/crates/async-compression/src/generic/bufread/encoder.rs index dde539bb..a3264571 100644 --- a/crates/async-compression/src/generic/bufread/encoder.rs +++ b/crates/async-compression/src/generic/bufread/encoder.rs @@ -2,7 +2,11 @@ use crate::{ codecs::EncodeV2, core::util::{PartialBuffer, WriteBuffer}, }; -use std::{io::Result, ops::ControlFlow}; +use std::{ + io::Result, + ops::ControlFlow, + panic::AssertUnwindSafe, +}; #[derive(Debug)] enum State { @@ -10,7 +14,7 @@ enum State { Flushing, Finishing, Done, - Error(std::io::Error), + Error(AssertUnwindSafe), } #[derive(Debug)] @@ -54,7 +58,7 @@ impl Encoder { State::Finishing } else { if let Err(err) = encoder.encode(input, output) { - self.state = State::Error(err); + self.state = State::Error(AssertUnwindSafe(err)); if output.written_len() > 0 { return ControlFlow::Break(Ok(())); } else { @@ -79,7 +83,7 @@ impl Encoder { } Ok(false) => State::Flushing, Err(err) => { - self.state = State::Error(err); + self.state = State::Error(AssertUnwindSafe(err)); if output.written_len() > 0 { return ControlFlow::Break(Ok(())); } else { @@ -92,7 +96,7 @@ impl Encoder { Ok(true) => State::Done, Ok(false) => State::Finishing, Err(err) => { - self.state = State::Error(err); + self.state = State::Error(AssertUnwindSafe(err)); if output.written_len() > 0 { return ControlFlow::Break(Ok(())); } else { @@ -107,7 +111,7 @@ impl Encoder { let State::Error(err) = std::mem::replace(&mut self.state, State::Done) else { unreachable!() }; - return ControlFlow::Break(Err(err)); + return ControlFlow::Break(Err(err.0)); } }; From 7a28b6aeab8b8b077d77193aab5a2815b0fbc264 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:25:53 +1100 Subject: [PATCH 2/4] Wrap std::io::Error in AssertUnwindSafe Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- .../src/generic/bufread/decoder.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/async-compression/src/generic/bufread/decoder.rs b/crates/async-compression/src/generic/bufread/decoder.rs index 35dc0cb0..ab1d5c20 100644 --- a/crates/async-compression/src/generic/bufread/decoder.rs +++ b/crates/async-compression/src/generic/bufread/decoder.rs @@ -2,7 +2,11 @@ use crate::{ codecs::DecodeV2, core::util::{PartialBuffer, WriteBuffer}, }; -use std::{io::Result, ops::ControlFlow}; +use std::{ + io::Result, + ops::ControlFlow, + panic::AssertUnwindSafe, +}; #[derive(Debug)] enum State { @@ -10,7 +14,7 @@ enum State { Flushing, Done, Next, - Error(std::io::Error), + Error(AssertUnwindSafe), } #[derive(Debug)] @@ -55,7 +59,7 @@ impl Decoder { // ignore the first error, occurs when input is empty // but we need to run decode to flush Err(err) if !first => { - self.state = State::Error(err); + self.state = State::Error(AssertUnwindSafe(err)); if output.written_len() > 0 { return ControlFlow::Break(Ok(())); } else { @@ -73,7 +77,7 @@ impl Decoder { Ok(true) => { if self.multiple_members { if let Err(err) = decoder.reinit() { - self.state = State::Error(err); + self.state = State::Error(AssertUnwindSafe(err)); if output.written_len() > 0 { return ControlFlow::Break(Ok(())); } else { @@ -91,7 +95,7 @@ impl Decoder { } Ok(false) => State::Flushing, Err(err) => { - self.state = State::Error(err); + self.state = State::Error(AssertUnwindSafe(err)); if output.written_len() > 0 { return ControlFlow::Break(Ok(())); } else { @@ -119,7 +123,7 @@ impl Decoder { let State::Error(err) = std::mem::replace(&mut self.state, State::Done) else { unreachable!() }; - return ControlFlow::Break(Err(err)); + return ControlFlow::Break(Err(err.0)); } }; From 7f0c265b47b87b0967c2b6b6d4811170b5491b93 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:31:54 +1100 Subject: [PATCH 3/4] Format use statements in decoder.rs Consolidate use statements for better readability. Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- crates/async-compression/src/generic/bufread/decoder.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/async-compression/src/generic/bufread/decoder.rs b/crates/async-compression/src/generic/bufread/decoder.rs index ab1d5c20..ce827b3c 100644 --- a/crates/async-compression/src/generic/bufread/decoder.rs +++ b/crates/async-compression/src/generic/bufread/decoder.rs @@ -2,11 +2,7 @@ use crate::{ codecs::DecodeV2, core::util::{PartialBuffer, WriteBuffer}, }; -use std::{ - io::Result, - ops::ControlFlow, - panic::AssertUnwindSafe, -}; +use std::{io::Result, ops::ControlFlow, panic::AssertUnwindSafe}; #[derive(Debug)] enum State { From 735ef8b108e9e833e5c9f1e8e6290e824ca0ae8d Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:32:19 +1100 Subject: [PATCH 4/4] Format imports in encoder.rs Consolidate imports in encoder.rs for cleaner code. Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> --- crates/async-compression/src/generic/bufread/encoder.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/async-compression/src/generic/bufread/encoder.rs b/crates/async-compression/src/generic/bufread/encoder.rs index a3264571..9aca902e 100644 --- a/crates/async-compression/src/generic/bufread/encoder.rs +++ b/crates/async-compression/src/generic/bufread/encoder.rs @@ -2,11 +2,7 @@ use crate::{ codecs::EncodeV2, core::util::{PartialBuffer, WriteBuffer}, }; -use std::{ - io::Result, - ops::ControlFlow, - panic::AssertUnwindSafe, -}; +use std::{io::Result, ops::ControlFlow, panic::AssertUnwindSafe}; #[derive(Debug)] enum State {