Skip to content

Commit

Permalink
jxl-frame: EC upsampling check
Browse files Browse the repository at this point in the history
  • Loading branch information
EugeneVert committed Jun 6, 2023
1 parent 76afd1f commit 9baeb00
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
19 changes: 19 additions & 0 deletions crates/jxl-frame/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,25 @@ impl<'a> Bundle<&'a ImageHeader> for Frame<'a> {
return Err(jxl_bitstream::Error::ValidationFailed("lf_level out of range").into());
}

for (ec_upsampling, ec_info) in header
.ec_upsampling
.iter()
.zip(image_header.metadata.ec_info.iter())
{
if ec_upsampling << ec_info.dim_shift < header.upsampling {
return Err(jxl_bitstream::Error::ValidationFailed(
"EC upsampling < color upsampling, which is invalid"
).into()
);
}
if ec_info.dim_shift > 7 + header.group_size_shift {
return Err(jxl_bitstream::Error::ValidationFailed(
"dim_shift too large"
).into()
);
}
}

let toc = read_bits!(bitstream, Bundle(Toc), &header)?;
let data = FrameData::new(&header);

Expand Down
5 changes: 0 additions & 5 deletions crates/jxl-image/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -231,12 +231,7 @@ impl<Ctx> Bundle<Ctx> for ExtraChannelInfo {

let ty_id = read_bits!(bitstream, Enum(ExtraChannelTypeRaw))?;
let bit_depth = BitDepth::parse(bitstream, ())?;

let dim_shift = read_bits!(bitstream, U32(0, 3, 4, 1 + u(3)))?;
if (1usize << dim_shift) > 8 {
return Err(jxl_bitstream::Error::ValidationFailed("dim_shift too large"))
}

let name = Name::parse(bitstream, ())?;

let ty = match ty_id {
Expand Down

0 comments on commit 9baeb00

Please sign in to comment.