avoid regex overflow in watermark base64 uploads
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-03-11 16:58:41 +08:00
parent e300153a01
commit c9808d4f5b

View File

@ -319,16 +319,24 @@ export async function POST(request: NextRequest) {
if (image_url.startsWith("data:")) {
console.log("[WatermarkRemove] 检测到base64格式,上传到S3...");
try {
// 解析 base64 data URL
const matches = image_url.match(/^data:image\/(\w+);base64,(.+)$/);
if (!matches) {
// 避免对超长 base64 使用正则,直接按 data URL 头部拆分
const commaIndex = image_url.indexOf(",");
if (commaIndex <= 0) {
return NextResponse.json(
{ error: "无效的图片格式" },
{ status: 400 }
);
}
const ext = matches[1] === "jpeg" ? "jpg" : matches[1];
const base64Data = matches[2];
const header = image_url.slice(0, commaIndex);
const base64Data = image_url.slice(commaIndex + 1);
const headerMatch = header.match(/^data:image\/([a-zA-Z0-9.+-]+);base64$/i);
if (!headerMatch || !base64Data) {
return NextResponse.json(
{ error: "无效的图片格式" },
{ status: 400 }
);
}
const ext = headerMatch[1].toLowerCase() === "jpeg" ? "jpg" : headerMatch[1].toLowerCase();
const buffer = Buffer.from(base64Data, "base64");
// 上传到 S3