fix(import): 媒体工厂守卫与加固——manifest 形态/侧车门控/冲突约束名/窗口边界与冲突测试
评审加固五项: - manifest 形态守卫:bundle 在场而 metadata.manifest 非数组 → throw(与 storageRoot 守卫同风格),不与"bundle 合法缺席=空清单"共用静默空 coercion - 侧车门控:空清单下级②不可达,跳过侧车加载——破损侧车副本不因无用输入 让整 job 失败 - public_path 冲突 catch 按约束名精确认领(postgres.js 的 constraint_name, drizzle 包一层在 cause)——未来加第三唯一索引不误标,其余 23505 原样上抛 - 集成用例:不同 source_url 同旧 uploads 路径 → 后到不覆盖、issue 报告、 只留一行(mediaRegistered=1) - 单测边界对拍:'<svg' 恰好收在 1024 字节窗口内(起点 1020)检出;起点 1021 被截断为 '<sv' → null 310 测试(308+2);typecheck/lint 三绿。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -63,4 +63,13 @@ describe('detectMediaType 手写签名表', () => {
|
||||
const beyond = Buffer.concat([Buffer.alloc(1200, 0x20), Buffer.from('<svg>')])
|
||||
expect(detectMediaType(beyond)).toBe(null)
|
||||
})
|
||||
|
||||
it('SVG 窗口边界逐字节对拍:<svg 恰好收在 1024 字节内 → 检出;起点 1021 被截断 → null', () => {
|
||||
// '<svg' 起点索引 1020:占 1020-1023,末字节恰在窗口(0-1023)内 → 检出
|
||||
const flush = Buffer.concat([Buffer.alloc(1020, 0x20), Buffer.from('<svg')])
|
||||
expect(detectMediaType(flush)).toStrictEqual({ type: 'image/svg+xml', svg: true })
|
||||
// 起点索引 1021:窗口只含 '<sv','g' 被截在窗外 → 不检出
|
||||
const truncated = Buffer.concat([Buffer.alloc(1021, 0x20), Buffer.from('<svg')])
|
||||
expect(detectMediaType(truncated)).toBe(null)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user