From 0537cfa773c1d37a4a6ccd7f0beada791cf7837e Mon Sep 17 00:00:00 2001 From: "Weidmann, Stefano" Date: Thu, 24 Sep 2026 11:06:28 +0200 Subject: [PATCH] fix: allow spaces in forced Code128 B --- src/oned/code_128_writer.rs | 2 +- src/oned/code_128_writer_test_tase.rs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/oned/code_128_writer.rs b/src/oned/code_128_writer.rs index 3ff5803f..14333bd8 100644 --- a/src/oned/code_128_writer.rs +++ b/src/oned/code_128_writer.rs @@ -154,7 +154,7 @@ fn check(contents: &str, hints: &crate::EncodeHints) -> Result { CODE_CODE_B_I32 => // allows no ascii below 32 (terminal symbols) { - if c <= 32 { + if c < 32 { return Err(Exceptions::illegal_argument_with(format!( "Bad character in input for forced code set B: ASCII value={c}" ))); diff --git a/src/oned/code_128_writer_test_tase.rs b/src/oned/code_128_writer_test_tase.rs index d2f98199..981400ab 100644 --- a/src/oned/code_128_writer_test_tase.rs +++ b/src/oned/code_128_writer_test_tase.rs @@ -342,6 +342,23 @@ fn testEncodeWithForcedCodeSetFailureCodeSetBBadCharacter() { .expect("encode"); } +#[test] +fn testEncodeWithForcedCodeSetBSpaces() { + let hints = EncodeHints::default().with(EncodeHintValue::ForceCodeSet("B".to_string())); + for toEncode in [" ", "Hello World 123", " Hello World 123 "] { + let result = WRITER + .encode_with_hints(toEncode, &BarcodeFormat::CODE_128, 0, 0, &hints) + .expect("encode"); + let decoded = Code128Reader + .decode_row(0, &result.getRow(0), &DecodeHints::default()) + .expect("decode"); + assert_eq!(toEncode, decoded.getText()); + assert_eq!(result.getWidth() as usize, 11 * toEncode.len() + 35 + 10); + let actual = bit_matrix_test_case::matrix_to_string(&result); + assert!(actual.starts_with(&format!("{QUIET_SPACE}{START_CODE_B}"))); + } +} + #[test] #[should_panic] fn testEncodeWithForcedCodeSetFailureCodeSetCBadCharactersNonNum() {