Skip to content

Commit fd6a286

Browse files
longsizhuogithub-actions[bot]
authored andcommitted
fix(upload): fileSize 用 Number.isSafeInteger 校验,拒小数
Content-Length 必须是非负整数,原来用 Number.isFinite 会放 10.5 这种小数通过, 签名 URL 绑 ContentLength: 10.5,R2 在客户端 PUT 时才 reject,用户看来是静默失败。 换成 Number.isSafeInteger: - 拒 NaN / Infinity(isFinite 本来也拒,保持) - 拒所有小数 - 隐含上界 <=2^53-1(Number.MAX_SAFE_INTEGER),不会被天文数字 number 溢出 负数还是靠 < 0 单独挡(isSafeInteger(-5) === true)。大小上限 MAX_UPLOAD_BYTES 不变。
1 parent 50b3e4e commit fd6a286

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

app/api/upload/route.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ export async function POST(request: NextRequest) {
127127
{ status: 400 },
128128
);
129129
}
130-
if (!Number.isFinite(fileSize) || fileSize < 0) {
130+
// Content-Length 必须是非负整数。用 isSafeInteger 直接拒 NaN / Infinity / 小数
131+
// (原来用 isFinite 会放 10.5 之类过去,然后 R2 在 PUT 时才 reject,变成用户看来
132+
// 的静默失败);同时 isSafeInteger 隐含了上界(<=2^53-1),不会被过大的 number 溢出。
133+
if (!Number.isSafeInteger(fileSize) || fileSize < 0) {
131134
return NextResponse.json({ error: "fileSize 参数无效" }, { status: 400 });
132135
}
133136
if (fileSize > MAX_UPLOAD_BYTES) {

0 commit comments

Comments
 (0)