Skip to content

Commit 3d75b03

Browse files
committed
fix(core): reject oversized QR matrices
1 parent e96094b commit 3d75b03

1 file changed

Lines changed: 26 additions & 1 deletion

File tree

crates/fastqr_core/src/decode.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn decode_modules(modules: &BitGrid) -> Result<DecodedQr, QrError> {
3434
}
3535

3636
fn version_from_size(size: usize) -> Result<Version, QrError> {
37-
if size < 21 || !(size - 17).is_multiple_of(4) {
37+
if !(21..=177).contains(&size) || !(size - 17).is_multiple_of(4) {
3838
return Err(QrError::InvalidMatrixSize(size));
3939
}
4040
Version::new(((size - 17) / 4) as u8)
@@ -445,3 +445,28 @@ impl<'a> BitReader<'a> {
445445
})
446446
}
447447
}
448+
449+
#[cfg(test)]
450+
mod tests {
451+
use crate::{BitGrid, QrError};
452+
453+
use super::decode_modules;
454+
455+
#[test]
456+
fn rejects_matrix_sizes_above_qr_version_40() {
457+
let oversized = BitGrid::new(181);
458+
assert_eq!(
459+
decode_modules(&oversized),
460+
Err(QrError::InvalidMatrixSize(181)),
461+
);
462+
}
463+
464+
#[test]
465+
fn rejects_oversized_congruent_matrix_without_version_wrap() {
466+
let oversized = BitGrid::new(1045);
467+
assert_eq!(
468+
decode_modules(&oversized),
469+
Err(QrError::InvalidMatrixSize(1045)),
470+
);
471+
}
472+
}

0 commit comments

Comments
 (0)