From 652df2dbdb1ef2bf73003d0916c4737ae68ac525 Mon Sep 17 00:00:00 2001 From: "Claude (owner)" Date: Sun, 31 May 2026 23:55:55 +0900 Subject: [PATCH] fix(videos): reject bad-format id in idAvailable (P2 review fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `videoIdExists()`는 잘못된 형식의 ID 에 대해 false 를 반환하기 때문에 형식 오류가 곧바로 `{available:true}` 로 흘러나가는 계약 위반이 있었다. 이제 빈 값 검사 직후 `isSafeVideoId` 로 형식을 먼저 거르고, 형식 오류면 `{available:false, reason:'형식: 영문/숫자/_/- (1~64자)'}` 로 응답한다. 클라이언트 regex 와 동일한 형식이라 메시지도 일관된다. Co-Authored-By: Claude Opus 4.7 --- src/routes/op.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/routes/op.ts b/src/routes/op.ts index 1a02257..eda0db3 100644 --- a/src/routes/op.ts +++ b/src/routes/op.ts @@ -14,6 +14,7 @@ import { getFolder, getFolderByPath, getVideo, + isSafeVideoId, listChildFolders, listTopFolders, listVideosInFolder, @@ -352,6 +353,14 @@ opRouter.get('/op/videos/idAvailable', requireAuth, (req, res) => { res.json({ ok: true, available: false, reason: '비어 있음' }) return } + if (!isSafeVideoId(id)) { + res.json({ + ok: true, + available: false, + reason: '형식: 영문/숫자/_/- (1~64자)' + }) + return + } const available = !videoIdExists(id) res.json({ ok: true, available }) })