Previously, only symbol->eci was checked against the 811799 upper
bound. Invalid ECI on non-first segments went unchecked, so codeword
a = (eci - 40) / 12769 + 40 could exceed 113, causing an out-of-bounds
read of dc_dot_patterns[113] in dc_make_dotstream().
https://zingl.github.io/bresenham.c by Zingl Alois rather than
RosettaCode one, better at small scales plus simplifies
licence/attribution issues;
fix licence/attribution issues for `plot_hexline()` also which
is actually based on `plotLine()` in zingl code (ticket #357,
props stefan6419846)
debian/copyright: update with above
BSD-3-clause of the contributions of Andrews & Arnold Ltd. -
many thanks to the Rev Adrian Kennard; corrected "reedsol"
copyright; removed Stefan Schmidt copyright as only difference
from originals is whitespace/formatting
(ticket #357, props stefan6419846)
non-digit in numeral (both caused misencodation);
replace `gm_macro_matrix[]` array with calculation (marginally
slower but saves ~1.4k);
replace `gm_shift_set[]` use with simple compares (performance);
change GM_CHINESE/etc defines to numbers so can index into new
`gm_shift_set[]` array (simplifies mode switching code);
GM_NUMBER -> GM_NUMERAL, modules -> macromodules_per_dim, various
other renamings to hopefully more explanatory names;
various other changes (mostly performance)
test suite: make use of new zxing-cpp diagnostics2 branch Grid
Matrix decoder
manual: slight clarification of `--gs1nocheck`
BWIPP: latest
new routines `mirror_start()`, `mirror_outfile()` & limit
substitutions on Unix to backslash (Windows remains the same);
restrict "borderwidth", "textgap", "vwhitesp", "whitesp" < 100
CODEONE: fix `ceilf()` -> `C1_MULT_CEIL()` in FAST_MODE encodation
(improves/changes some encodation)
composite: preserve `gs1_verify()` warning using `warn_level` hack;
fix wrong name `zint_dbar_omnstk_set_height()` ->
`zint_dbar_stk_set_height()`;
use new `zint_micropdf_variant()` & `zint_micropdf_expand()`
routines (see below)
MICROPDF417: move variant determination into new shareable routine
`zint_micropdf_variant()` & expansion into `zint_micropdf_expand()`
qzint: add helper methods `setbordertypevalue()`,
`encodedinputmode()`, `encodedoutputoptions()`,
`ecivaluetoeciindex()` and `eciindextoecivalue()`
dbar: for performance pre-calculate `combins()` as array
coverage: add `malloc()`-type failure testing to AZTEC,
CONTENT_SEGS, MEMORY_FILE, raster, Reed-Solomon & vector;
numerous changes to remove unused code and test more branches
common: add `isxdigit()`
general: various code fiddlings
manual: add char names to sequence and batch format char tables;
mention long options can be shortened (& use "--compliantheight"
-> "--compliant");
expand mirror explanation & document substitutions in footnote;
workaround xecjk putting space after double quote when quoting
cjk chars & rejig input mode examples;
workaround html alignment bug in table gs1-enabled symbologies by
adding extra rh dashes to header cols;
add "figure nn: " to txt image tags via sed:
various other small fixes and rephrasings
txt output to semi-restore previous behaviour;
adjust GS1-Enabled table & command line so not > 80 chars;
Fedora now requires tcolorbox install
BWIPP: update to latest
with option "--vers=1" (API `option_2 = 1`);
define minimum height based on AIM USS Telepen
TELEPEN_NUM: support switching to Full ASCII mode with DLE;
max digits 136 -> 138
TELEPEN: support switching to Compressed Numeric Mode with DLE
if AIM-defined Start/Stop enabled
CLI: make args for "--dmb256", "--dmc40", "--scalexdimdp" and
"--scmvv" optional
library: new escape sequences `\L`, `\F`, `\N`, & refactor parsing
to use `escs` table
ZBarcode_Scale_From_XdimDp: allow TXT filetype (so "--dump" test
works)
output: Telepen default quiet zone confirmed as 10X
aztec/dmatrix: fix source line too long
man page: embolden options and emphasize args;
add barcode names to standards; various other fixes
improve P/S vs P/L choice when have ECI;
add ZINT_DEBUG_TEST dump
AUSPOST: allow variable length data input
DATAMATRIX: do `EXTRA_ESCAPE_MODE` processing up front & check have
non-zero length afterwards;
disallow `READER_INIT` and `EXTRA_ESCAPE_MODE`;
general: add new `z_zero_fill()` func & use;
add new `z_extra_escape_position_fnc1()` helper;
in `z_ct_set_seg_extra_escapes_eci` check position FNC1 whether
or not have ECI
library: escape_char_process: note escaped backslash followed by
caret by passes `EXTRA_ESCAPE_MODE` check
test suite: BWIPP: update to latest; support AUSPOST variants;
process `EXTRA_ESCAPE_MODE` escaping up front
CODE128: properly fix not switching before FNC1 in 2nd position
after alpha (commit [7b0767])
PLANET/KIX: adapt POSTNET to cater for both
general: use static strings to save a few bytes (start/stop in
particular); various other code fiddles
postal: move tables into funcs
CODE128: error on unrecognized extra escape sequences instead of
just passing them thru;
fix possible shifting before manual FNC1 in 2nd position
after single alpha (otherwise won't be recognized as AIM)
fix not removing manual FNC1 in 1st/2nd position from content
segs (as implied by symbology identifier)
CLI: warn if both "--dmre" and "--square" given (as "--square"
overwrites "--dmre")
common: new routines `z_isalpha()`, `z_extra_escapes()` and
`z_ct_set_seg_extra_escapes_eci()`
library: new helper `supports_extra_escape_mode()`;
fix some error_number dups
BWIPP: update to latest, and allow for removal of DBAR_LTD_CC RHS
quiet zones & extra row when have add-on in EAN/UPC composites
test suite: fix BWIPP escaping
manual/man/tcl: update for DATAMATRIX manual FNC1 support
Windows: resource scripts: make more consistent (libzint, CLI, GUI)
win32/README: update with MSVC 2026