diff --git a/src/handler/image.ts b/src/handler/image.ts index 99cff655..47260104 100644 --- a/src/handler/image.ts +++ b/src/handler/image.ts @@ -174,7 +174,7 @@ export async function resolveImageData( try { decodedURI = - /data:(?[a-z/+]+)(;(charset=)?(?.*))?,(?.*)/g.exec( + /data:(?[a-z/+]+)(;[^;=]+=[^;=]+)*?(;(?[^;,]+))?,(?.*)/g.exec( src ).groups as typeof decodedURI } catch (err) { diff --git a/test/__image_snapshots__/image-test-tsx-test-image-test-tsx-background-image-url-should-handle-charset-utf-8-with-comma-in-data-1-snap.png b/test/__image_snapshots__/image-test-tsx-test-image-test-tsx-background-image-url-should-handle-charset-utf-8-with-comma-in-data-1-snap.png new file mode 100644 index 00000000..96936cd6 Binary files /dev/null and b/test/__image_snapshots__/image-test-tsx-test-image-test-tsx-background-image-url-should-handle-charset-utf-8-with-comma-in-data-1-snap.png differ diff --git a/test/__image_snapshots__/image-test-tsx-test-image-test-tsx-background-image-url-should-handle-charset-utf-8-with-in-base-64-1-snap.png b/test/__image_snapshots__/image-test-tsx-test-image-test-tsx-background-image-url-should-handle-charset-utf-8-with-in-base-64-1-snap.png new file mode 100644 index 00000000..e935094b Binary files /dev/null and b/test/__image_snapshots__/image-test-tsx-test-image-test-tsx-background-image-url-should-handle-charset-utf-8-with-in-base-64-1-snap.png differ diff --git a/test/image.test.tsx b/test/image.test.tsx index ff7f50f6..6ba66396 100644 --- a/test/image.test.tsx +++ b/test/image.test.tsx @@ -638,4 +638,26 @@ describe('background-image: url()', () => { expect(toImage(svg, 100)).toMatchImageSnapshot() }) + + it('should handle charset=utf-8 with comma in data', async () => { + const svg = await satori( + `} + />, + { width: 100, height: 100, fonts } + ) + + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should handle charset=utf-8 with in base64', async () => { + const svg = await satori( + , + { width: 100, height: 100, fonts } + ) + + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) })