From 174bbf06a8b465ce5f060c0234ee15e5a1a95bbb Mon Sep 17 00:00:00 2001 From: gitlost Date: Sun, 23 Feb 2025 15:53:47 +0000 Subject: [PATCH] =?UTF-8?q?CODE128:=20***2.14.0=20regression=20fix***=20?= =?UTF-8?q?=20=20set=20C1=20start=20latch=20lengths=20to=20max=20(was=200)?= =?UTF-8?q?=20to=20prevent=20C1=20being=20=20=20selected=20initially=20-?= =?UTF-8?q?=20was=20causing=20StartC=20to=20be=20omitted,=20e.g.=20=20=20f?= =?UTF-8?q?or=20"12=C3=A9"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChangeLog | 8 +++++++- backend/code128.c | 7 ++++--- backend/tests/test_code128.c | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e972622..2ae89c67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,11 @@ -Version 2.14.0.9 (dev) not released yet (2025-02-20) +Version 2.14.0.9 (dev) not released yet (2025-02-23) ==================================================== +***2.14.0 regression fix*** +--------------------------- +- CODE128: start code no longer omitted for data starting with numerics followed + by extended ASCII (Latin-1) + **Incompatible changes** ------------------------ - New `text_length` field in `symbol` (useful for new output option @@ -16,6 +21,7 @@ Changes Bugs ---- +- CODE128: fix 2.14.0 regression (see above), never start in mode C1 - CODE32: ignore `option_2` (check digit options) - PZN: ignore `option_2` (check digit options) except for indicates PZN7 only - DPD: exclude DEL from ident tag also diff --git a/backend/code128.c b/backend/code128.c index 654578ef..bc3a9d83 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -122,9 +122,9 @@ static const char c128_start_latch_seq[3][C128_STATES][4] = { }; static const char c128_start_latch_len[3][C128_STATES] = { /* Lengths of above */ /* A0 B0 A1 B1 C0 C1 (not used) */ - { 0, 1, 1, 3, 3, 1 }, /* Normal */ - { 0, 2, 2, 4, 4, 2 }, /* GS1_MODE */ - { 0, 2, 2, 4, 4, 3 }, /* READER_INIT */ + { 0, 1, 1, 3, 3, 1, 64 }, /* Normal */ + { 0, 2, 2, 4, 4, 2, 64 }, /* GS1_MODE */ + { 0, 2, 2, 4, 4, 3, 64 }, /* READER_INIT */ }; /* Output cost (length) for Code Sets A/B */ @@ -255,6 +255,7 @@ static int c128_set_values(const unsigned char source[], const int length, const if (cset != prior_cset) { int j; if (prior_cset == 0) { + assert(cset != C128_C1); for (j = 0; j < c128_start_latch_len[start_idx][cset]; j++) { values[glyph_count++] = c128_start_latch_seq[start_idx][cset][j]; } diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index 24346c19..9122e1dc 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -559,6 +559,22 @@ static void test_input(const testCtx *const p_ctx) { /*122*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^A\342\342\\^B\202\202", -1, 0, 156, 0, "(14) 103 101 101 98 66 98 66 100 98 66 98 66 72 106", "StartA FNC4 FNC4 ShB 226(E2) ShB 226(E2) CodeB ShA 130(82) ShA 130(82); BWIPP different encodation" }, /*123*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^A\342\342\342\342\342\\^Baaaaa", -1, 0, 255, 0, "(23) 103 101 101 98 66 98 66 98 66 98 66 98 66 100 100 100 65 65 65 65 65 46 106", "BWIPP different encodation" }, /*124*/ { DATA_MODE | EXTRA_ESCAPE_MODE, "\\^A\342\012\342\342\342\\^B\202\342\012\012", -1, 0, 277, 0, "(25) 103 101 98 66 74 101 101 98 66 98 66 98 66 100 98 66 66 100 100 98 74 98 74 41 106", "BWIPP different encodation" }, + /*125*/ { UNICODE_MODE, "12é", -1, 0, 79, 0, "(7) 105 12 100 100 73 85 106", "**2.14.0 regression*** StartC 12 CodeB FNC4 é; BWIPP different encodation (StartB)" }, + /*126*/ { UNICODE_MODE, "123é", -1, 0, 90, 0, "(8) 105 12 100 19 100 73 6 106", "StartC 12 CodeB 3 FNC4 é; BWIPP different encodation (StartB)" }, + /*127*/ { UNICODE_MODE, "1234é", -1, 0, 90, 1, "(8) 105 12 34 100 100 73 14 106", "StartC 12 34 CodeB FNC4 é" }, + /*128*/ { UNICODE_MODE, "123456é", -1, 0, 101, 1, "(9) 105 12 34 56 100 100 73 43 106", "StartC 12 34 56 CodeB FNC4 é" }, + /*129*/ { UNICODE_MODE, "1234567é", -1, 0, 112, 1, "(10) 105 12 34 56 100 23 100 73 22 106", "StartC 12 34 56 CodeB 7 FNC4 é" }, + /*130*/ { UNICODE_MODE, "1é", -1, 0, 68, 1, "(6) 104 17 100 73 25 106", "StartB 1 FNC4 é" }, + /*131*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^C12é", -1, 0, 79, 0, "(7) 105 12 100 100 73 85 106", "StartC 12 CodeB FNC4 é; BWIPP different encodation (StartB)" }, + /*132*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^C1é", -1, 0, 68, 1, "(6) 104 17 100 73 25 106", "StartB 1 FNC4 é" }, + /*133*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, "\\^Cé", -1, 0, 57, 1, "(5) 104 100 73 41 106", "StartB FNC4 é" }, + /*134*/ { UNICODE_MODE, "12é12", -1, 0, 101, 0, "(9) 105 12 100 100 73 99 12 34 106", "StartC 12 CodeB FNC4 é CodeC 12; BWIPP different encodation (StartB)" }, + /*135*/ { UNICODE_MODE, "1234é12", -1, 0, 112, 0, "(10) 105 12 34 100 100 73 99 12 74 106", "StartC 12 34 CodeB FNC4 é CodeC 12; BWIPP different encodation (CodeB)" }, + /*136*/ { UNICODE_MODE, "1234é1234", -1, 0, 123, 1, "(11) 105 12 34 100 100 73 99 12 34 37 106", "StartC 12 34 CodeB FNC4 é CodeC 12 34" }, + /*137*/ { DATA_MODE, "12\200", -1, 0, 79, 0, "(7) 105 12 101 101 64 54 106", "StartC 12 CodeA FNC4 PAD; BWIPP different encodation (StartA)" }, + /*138*/ { DATA_MODE, "1234\200", -1, 0, 90, 1, "(8) 105 12 34 101 101 64 79 106", "StartC 12 34 CodeA FNC4 PAD" }, + /*139*/ { UNICODE_MODE, "12é12é", -1, 0, 123, 0, "(11) 105 12 100 100 73 17 18 100 73 17 106", "StartC 12 CodeB FNC4 é 1 2 FNC4 é; BWIPP different encodation (StartB)" }, + /*140*/ { UNICODE_MODE, "1234é123456é", -1, 0, 167, 1, "(15) 105 12 34 100 100 73 99 12 34 56 100 100 73 15 106", "StartC 12 34 CodeB FNC4 é CodeC 12 34 56 CodeB FNC4 é" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret;