fix(hardening): µs-stamp leak, ReDoS, ISO-date leak, compact-range regression (#3) #4

Merged
vr6syncro merged 1 commit from fix/hardening-r3-2026-07-11 into main 2026-07-11 14:28:12 +02:00
Owner

Setzt die Härtungen aus #3 um (Fable-Bug-Hunt R3, alle am Live-Core belegt). Fixes im ausgelieferten index.html-Core; Testharness extrahiert genau diesen Core.

  • #1 µs-Stempel-LeakTIME_SRC ms-Gruppe (\d{1,3})(\d{1,9}); stampParts kappt weiterhin auf 3 Millis. 4+-stellige Millis (µs-Logs ,696123) werden komplett geblankt → kein Phantom-ZE.
  • #2 ReDoS parseDecimal — Regex linearisiert /^[+-]?(?:\d+(?:\.\d+)?|\.\d+)$/ + Längen-Guard (>40 → null). 300k-Ziffernblock jetzt <200ms statt ~30s Freeze.
  • #3 ISO-Datum-ohne-Zeit-Leak — nach Stempel-Blanking auch nackte Daten (DATE_SRC) blanken → 2026-07-07 Sichtpruefung liefert kein ZE 2026 mehr.
  • #4 Offset-Strip frisst kompakte Ranges — Strip nur hinter Pflicht-Sekunden HH:MM:SS + Lookahead (?![:.,]?\d). 12:17-12:20, 08:00-16:30, En-Dash und …,696-12:20,305 parsen wieder als Range.
  • #6 (Bonus) — BiDi-Steuerzeichen (LRM/RLM/ALM/LRI–PDI) in normalizeText entfernt → kein 12h→2h Silent-Wrong.

Tests: +25 gezielte R3-Tests, node test/run.mjs241 grün (vorher 216).

Schließt #3.

🤖 Generated with Claude Code

https://claude.ai/code/session_013foajK9dPn26FDk76P4SfK

Setzt die Härtungen aus #3 um (Fable-Bug-Hunt R3, alle am Live-Core belegt). Fixes im ausgelieferten `index.html`-Core; Testharness extrahiert genau diesen Core. - **#1 µs-Stempel-Leak** — `TIME_SRC` ms-Gruppe `(\d{1,3})`→`(\d{1,9})`; `stampParts` kappt weiterhin auf 3 Millis. 4+-stellige Millis (µs-Logs `,696123`) werden komplett geblankt → kein Phantom-ZE. - **#2 ReDoS `parseDecimal`** — Regex linearisiert `/^[+-]?(?:\d+(?:\.\d+)?|\.\d+)$/` + Längen-Guard (`>40 → null`). 300k-Ziffernblock jetzt <200ms statt ~30s Freeze. - **#3 ISO-Datum-ohne-Zeit-Leak** — nach Stempel-Blanking auch nackte Daten (`DATE_SRC`) blanken → `2026-07-07 Sichtpruefung` liefert kein ZE `2026` mehr. - **#4 Offset-Strip frisst kompakte Ranges** — Strip nur hinter Pflicht-Sekunden `HH:MM:SS` + Lookahead `(?![:.,]?\d)`. `12:17-12:20`, `08:00-16:30`, En-Dash und `…,696-12:20,305` parsen wieder als Range. - **#6 (Bonus)** — BiDi-Steuerzeichen (LRM/RLM/ALM/LRI–PDI) in `normalizeText` entfernt → kein 12h→2h Silent-Wrong. **Tests:** +25 gezielte R3-Tests, `node test/run.mjs` → **241 grün** (vorher 216). Schließt #3. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_013foajK9dPn26FDk76P4SfK
- #1 µs-Stempel-Leak: TIME_SRC ms-Gruppe (\d{1,3})->(\d{1,9}); stampParts kappt weiterhin auf 3 Millis. 4+-stellige Millis (µs-Logs ,696123) werden nun komplett geblankt -> kein Phantom-ZE.
- #2 ReDoS parseDecimal: Regex linearisiert /^[+-]?(?:\d+(?:\.\d+)?|\.\d+)$/ + Längen-Guard (>40 -> null). 300k-Ziffernblock jetzt <200ms statt ~30s Freeze.
- #3 ISO-Datum-ohne-Zeit-Leak: nach Stempel-Blanking auch nackte Daten (DATE_SRC) blanken -> '2026-07-07 Sichtpruefung' liefert kein ZE 2026 mehr.
- #4 ISO-Offset-Strip: nur hinter Pflicht-Sekunden (HH:MM:SS) + Lookahead (?![:.,]?\d). Kompakte Ranges '12:17-12:20'/'08:00-16:30'/En-Dash/',696-12:20,305' parsen wieder als Range.
- #6 (Bonus): BiDi-Steuerzeichen (LRM/RLM/ALM/LRI-PDI) in normalizeText entfernt -> kein 12h->2h Silent-Wrong.
- Tests: +25 gezielte R3-Tests (241 grün, vorher 216).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013foajK9dPn26FDk76P4SfK
vr6syncro deleted branch fix/hardening-r3-2026-07-11 2026-07-11 14:28:13 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
vr6syncro/protokollrechner!4
No description provided.