fix(media-core): accept unpadded inline base64 images (#96437) · openclaw/openclaw@6b1755a
lin-hongkuan
·
2026-06-24
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -13,6 +13,16 @@ describe("base64 helpers", () => {
|
13 | 13 | actual: canonicalizeBase64(" SGV s bG8= \n"), |
14 | 14 | expected: "SGVsbG8=", |
15 | 15 | }, |
| 16 | +{ |
| 17 | +name: "canonicalizeBase64 pads valid unpadded base64", |
| 18 | +actual: canonicalizeBase64("SGVsbG8"), |
| 19 | +expected: "SGVsbG8=", |
| 20 | +}, |
| 21 | +{ |
| 22 | +name: "canonicalizeBase64 rejects impossible unpadded length", |
| 23 | +actual: canonicalizeBase64("S"), |
| 24 | +expected: undefined, |
| 25 | +}, |
16 | 26 | { |
17 | 27 | name: "canonicalizeBase64 rejects invalid base64 characters", |
18 | 28 | actual: canonicalizeBase64('SGVsbG8=" onerror="alert(1)'), |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -74,8 +74,15 @@ export function canonicalizeBase64(base64: string): string | undefined {
|
74 | 74 | } |
75 | 75 | cleaned += base64[i]; |
76 | 76 | } |
77 | | -if (!cleaned || cleaned.length % 4 !== 0) { |
| 77 | +if (!cleaned) { |
78 | 78 | return undefined; |
79 | 79 | } |
| 80 | +const remainder = cleaned.length % 4; |
| 81 | +if (remainder !== 0) { |
| 82 | +if (sawPadding || remainder === 1) { |
| 83 | +return undefined; |
| 84 | +} |
| 85 | +cleaned += "=".repeat(4 - remainder); |
| 86 | +} |
80 | 87 | return cleaned; |
81 | 88 | } |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -39,6 +39,13 @@ describe("inline image data URL sanitizer", () => {
|
39 | 39 | ); |
40 | 40 | }); |
41 | 41 | |
| 42 | +it("canonicalizes valid unpadded image data URLs", () => { |
| 43 | +const unpaddedPng = PNG_1X1.replace(/=+$/u, ""); |
| 44 | +expect(sanitizeInlineImageDataUrl(`data:image/png;base64,${unpaddedPng}`)).toBe( |
| 45 | +`data:image/png;base64,${PNG_1X1}`, |
| 46 | +); |
| 47 | +}); |
| 48 | + |
42 | 49 | it("rejects image data URLs for formats that require conversion before provider transport", () => { |
43 | 50 | expect(sanitizeInlineImageDataUrl(`data:image/bmp;base64,${BMP_HEADER}`)).toBeUndefined(); |
44 | 51 | expect(sanitizeInlineImageDataUrl(`data:image/heic;base64,${HEIC_HEADER}`)).toBeUndefined(); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。