Revision history for Encode::Wide
0.07 Thu Jul 16 21:42:03 EDT 2026
[ Security ]
- Fixed XSS: HTML::Entities::decode is now suppressed when keep_hrefs => 1.
Without this fix, encoded payloads like <script> were decoded to raw
tags that bypassed re-escaping and appeared in the output.
- Fixed ReDoS: possessive quantifier (++) now used in the bare-& substitution
regex, preventing O(n^2) backtracking on adversarial inputs.
- Removed /e eval flag from _sub_map (hash lookup needs no eval semantics).
- Removed /e eval flag from keep_hrefs substitution; uses %_HTML_ESCAPE map.
- Removed /gex eval from apos_map substitution; uses alternation regex + /g.
[ Enhancements ]
- Added the ™ (trade mark) character for both HTML (™) and XML (™)
- Added regression test for č (č / č)
- Added Ž (Ž / Ž) character support and regression test
- Added bin/wide2html and bin/wide2xml command-line scripts
- Added t/security.t: regression suite for all security fixes above.
- _sub_map internal helper now uses O(1) hash lookup (was O(n) grep per match).
- %_EXTRA_ENTITY_MAP / $_EXTRA_ENTITY_RE hoisted to module-level compile-time
constants (were rebuilt on every call).
[ Bug Fixes ]
- Fixed entity_map pre-decode (č, ž etc.) which was silently
ignored due to single-character regex.
- Fixed &Iicrc; typo in pass-3 HTML byte_map (correct spelling: Î).
- wide_to_xml() undef error message now reads "wide_to_xml() string not set"
(was "string not set"), consistent with wide_to_html().
[ Removed ]
- Removed Term::ANSIColor runtime dependency (was used only in now-deleted
debug instrumentation).
- Removed ~30 commented-out print STDERR debug blocks from source.
[ Documentation ]
- All POD die references corrected to croak (error location is caller's, not
the module's internals).
- PSEUDOCODE steps updated to reflect the keep_hrefs entity-decode suppression.
- FORMAL SPECIFICATION corrected: wide_to_xml error string and croak vs die.
- SYNOPSIS XML example corrected to show actual zero-padded output (é).
- keep_hrefs POD documents the XSS-prevention side effect.
- DESCRIPTION bullet items fixed (C<< >> form prevents fat-comma rendering bug).
- README.md regenerated from POD.
[ Meta ]
- LICENSE field corrected from 'GPL' to 'gpl_2' (CPAN meta-spec v2 identifier).
- Repository URL changed from git:// to https:// (git:// dropped by GitHub 2022).
- Time::HiRes added to TEST_REQUIRES in Makefile.PL and cpanfile.
- Term::ANSIColor removed from PREREQ_PM / cpanfile (no longer used at runtime).
0.06 Thu Sep 25 08:28:23 EDT 2025
Added the µ character
In HTML, Encode ! as !
Added the test dashboard
0.05 Fri Aug 8 16:57:40 EDT 2025
Use tables to reduce the scanning of the input
Allow the input to be a ref to a string
0.04 Tue Jul 22 20:42:18 EDT 2025
Trap ! in XML
0.03 Sun Jul 20 11:22:05 EDT 2025
Added – (ndash) and U2018/U2019 encoding in wide_to_xml
Better debug message now dumps the errant bytes
0.02 Tue Jul 15 21:48:42 EDT 2025
Extended testing
0.01 Sat Jul 12 19:33:14 EDT 2025
First draft