Skip to content

panic: non-ASCII filenames crash podcast migration mid-run #545

Description

@forkwright

Finding

parse_date_stem() slices &stem[..10] (line 557) and &stem[..8] (566) guarded only by byte length, not is_char_boundary, so a podcast filename with a multibyte UTF-8 char straddling offset 10/8 (e.g. '123456789é - Title.mp3') panics inside the spawn_blocking migration task, aborting the whole run and losing the summary while already-moved files stay moved (no rollback).

Evidence

crates/archon/src/migrate.rs:557,566. Surfaced by the 2026-07-03 deep-audit workflow (adversarially verified + Opus-judged).

Why this matters

A podcast filename with a multibyte UTF-8 character at the date-slice boundary panics the migration task mid-run, aborting the whole migration with already-moved files left in an inconsistent, unrecorded state (no rollback).

Desired correction

Guard the slices with stem.is_char_boundary(10)/(8) (or use stem.get(..10)) before calling looks_like_iso_date, returning None on a non-boundary rather than panicking.

Done when: the defect's failure mode no longer reproduces and a regression test covers it.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions