|
1 | 1 | # @moderation-api/unicode-spoofing |
2 | 2 |
|
| 3 | +## 0.2.0 |
| 4 | + |
| 5 | +### Minor Changes |
| 6 | + |
| 7 | +- [#10](https://github.com/moderation-api/unicode-spoofing/pull/10) [`d8f002d`](https://github.com/moderation-api/unicode-spoofing/commit/d8f002d50bc2d66d2b830082587944e6ccbeee39) Thanks [@chrisdengso](https://github.com/chrisdengso)! - Broaden the `invisible` signal to the full hidden-character corpus. |
| 8 | + |
| 9 | + `analyze()` now also reports and strips: |
| 10 | + |
| 11 | + - **Invisible characters that belong to no word** — a bidi control or |
| 12 | + zero-width character sitting between punctuation or spaces, rather than |
| 13 | + inside a token. This is what hid two of the four controls in a Trojan Source |
| 14 | + line (`if (level != "user<RLO> <LRI>// admin check<PDI> <LRI>") {`). |
| 15 | + - **Blank glyphs that are not whitespace** — Hangul fillers (U+115F, U+1160, |
| 16 | + U+3164, U+FFA0), BRAILLE PATTERN BLANK, MUSICAL SYMBOL NULL NOTEHEAD. The |
| 17 | + Hangul fillers previously misreported as `mixed_script`, since they are |
| 18 | + Hangul letters to the property tables. |
| 19 | + - **Invisible combining marks** — COMBINING GRAPHEME JOINER, the Khmer inherent |
| 20 | + vowels, KAITHI VOWEL SIGN I. Each stays legitimate inside its own script. |
| 21 | + - **Stray variation selectors** — a selector on a base with no registered |
| 22 | + sequence, the "ASCII smuggling" payload channel. Registered sequences (emoji |
| 23 | + presentation, keycaps, ideographic variants, Mongolian FVS) are untouched. |
| 24 | + |
| 25 | + Unicode whitespace (U+00A0, U+2000–U+200A, U+3000, …) is deliberately still not |
| 26 | + flagged: it is ordinary typography and every `\s` matcher already treats it as a |
| 27 | + space. |
| 28 | + |
3 | 29 | ## 0.1.1 |
4 | 30 |
|
5 | 31 | ### Patch Changes |
|
0 commit comments