ファイル名の上限拡大と os.Root への置き換え(ステップ9) #13

Merged
kazu634 merged 2 commits from path-hardening into main 2026-10-04 14:56:04 +09:00
Owner

概要

ステップ9: ファイル名の上限拡大と、動画の配信・削除の os.Root への置き換え。

  • internal/media: 番組名 90 バイト・回タイトル 140 バイト(UTF-8)に拡大し、80 文字の上限を廃止。ファイル名全体を 255 バイト以下に保つ(超える場合は回タイトルから削る)。根拠は本番の NFS マウントの namlen=255
  • エピソード ID はサニタイズ後 64 バイトを上限とし、超えたら RelativeVideoPath がエラーを返す(戻り値を (string, error) に変更)。実際の TVer の ID は 10 文字程度
  • internal/worker: ファイル名を作れないジョブはダウンロード開始前に invalid_output で失敗させ、理由を記録して作業ディレクトリを片付ける
  • internal/web: 動画の配信・削除を os.OpenRoot + Root.Open / Root.Remove に置き換え、自前のパス検査を削除。VIDEO_DIR の外(../・絶対パス・外を指すリンク・絶対リンク)は OS の仕組みで拒否([公式] https://pkg.go.dev/os#Root)
  • PROJECT.md を更新

確認

  • go test -count=1 ./... → 188件成功・0失敗、go test -race(web・media・worker)競合なし、go vet 指摘0
  • QA の検証で ID が 248 バイト以上だとファイル名が 255 バイトを超える不具合を検出 → 64 バイト上限で差し戻し・修正済み。QA が境界・リンク・worker の停止位置のテストを追加し、上限を 65 にした仮実装でテストが失敗することを確認

注意

  • PROJECT.md の課題欄にある os.Root の項目は #12 にだけ存在する。両方のマージ後に残っていないことを確認する
  • web・worker のコードが変わるため、マージ後に本番(dockage)で git pull と再ビルドが必要

🤖 Generated with Claude Code

https://claude.ai/code/session_01BcuBr9DyfcqZY8xFQsY5Di

## 概要 ステップ9: ファイル名の上限拡大と、動画の配信・削除の `os.Root` への置き換え。 - `internal/media`: 番組名 90 バイト・回タイトル 140 バイト(UTF-8)に拡大し、80 文字の上限を廃止。ファイル名全体を 255 バイト以下に保つ(超える場合は回タイトルから削る)。根拠は本番の NFS マウントの `namlen=255` - エピソード ID はサニタイズ後 64 バイトを上限とし、超えたら `RelativeVideoPath` がエラーを返す(戻り値を `(string, error)` に変更)。実際の TVer の ID は 10 文字程度 - `internal/worker`: ファイル名を作れないジョブはダウンロード開始前に `invalid_output` で失敗させ、理由を記録して作業ディレクトリを片付ける - `internal/web`: 動画の配信・削除を `os.OpenRoot` + `Root.Open` / `Root.Remove` に置き換え、自前のパス検査を削除。`VIDEO_DIR` の外(`../`・絶対パス・外を指すリンク・絶対リンク)は OS の仕組みで拒否([公式] https://pkg.go.dev/os#Root) - `PROJECT.md` を更新 ## 確認 - `go test -count=1 ./...` → 188件成功・0失敗、`go test -race`(web・media・worker)競合なし、`go vet` 指摘0 - QA の検証で ID が 248 バイト以上だとファイル名が 255 バイトを超える不具合を検出 → 64 バイト上限で差し戻し・修正済み。QA が境界・リンク・worker の停止位置のテストを追加し、上限を 65 にした仮実装でテストが失敗することを確認 ## 注意 - `PROJECT.md` の課題欄にある `os.Root` の項目は #12 にだけ存在する。両方のマージ後に残っていないことを確認する - web・worker のコードが変わるため、マージ後に本番(dockage)で `git pull` と再ビルドが必要 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01BcuBr9DyfcqZY8xFQsY5Di
kazu634 added 1 commit 2026-10-04 13:43:41 +09:00
kazu634 added 1 commit 2026-10-04 14:55:22 +09:00
kazu634 merged commit d4346c06fe into main 2026-10-04 14:56:04 +09:00
kazu634 deleted branch path-hardening 2026-10-04 14:56:04 +09:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kazu634/tver#13