diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index cb988981..2ab53599 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -50,7 +50,7 @@ jobs: - name: Installing emulator and linker run: | sudo apt-get update - sudo apt-get install qemu binfmt-support qemu-user-static gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu + sudo apt-get install qemu-system binfmt-support qemu-user-static gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu - name: Installing Rust toolchain uses: actions-rs/toolchain@v1 diff --git a/src/parser.rs b/src/parser.rs index 5b4dffe1..b17e7e9a 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -405,6 +405,12 @@ pub fn parse_sos(reader: &mut R, frame: &FrameInfo) -> Result let predictor_selection; let point_transform = successive_approximation_low; + if point_transform >= frame.precision { + return Err(Error::Format( + "invalid point transform, must be less than the frame precision".to_owned(), + )); + } + if frame.coding_process == CodingProcess::DctProgressive { predictor_selection = Predictor::NoPrediction; if spectral_selection_end > 63 || spectral_selection_start > spectral_selection_end || diff --git a/tests/crashtest/images/invalid-prediction-shift.jpg b/tests/crashtest/images/invalid-prediction-shift.jpg new file mode 100644 index 00000000..386f63eb Binary files /dev/null and b/tests/crashtest/images/invalid-prediction-shift.jpg differ