Skip to content

Commit b20cc0e

Browse files
committed
fix(@angular-devkit/build-angular): correctly handle data URIs with escaped quotes in stylesheets
Previously, the RegExp didn't correctly handle cases where data URIs had escaped quotes like the below ```css url("data:image/svg+xml;charset=utf-8,<svg width=/"16/" height=/"15/"></svg>") ``` Closes angular#23680
1 parent 88c3b71 commit b20cc0e

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

packages/angular_devkit/build_angular/src/builders/browser/specs/styles_spec.ts

+13
Original file line numberDiff line numberDiff line change
@@ -693,4 +693,17 @@ describe('Browser Builder styles', () => {
693693

694694
await browserBuild(architect, host, target, { styles: ['src/styles.css'] });
695695
});
696+
697+
it('works when Data URI has escaped quote', async () => {
698+
const svgData = `"data:image/svg+xml;charset=utf-8,<svg width=/"16/" height=/"15/"></svg>"`;
699+
700+
host.writeMultipleFiles({
701+
'src/styles.css': `
702+
div { background: url(${svgData}) }
703+
`,
704+
});
705+
706+
const result = await browserBuild(architect, host, target, { styles: ['src/styles.css'] });
707+
expect(await result.files['styles.css']).toContain(svgData);
708+
});
696709
});

packages/angular_devkit/build_angular/src/webpack/plugins/postcss-cli-resources.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ export default function (options?: PostcssCliResourcesOptions): Plugin {
155155
}
156156

157157
const value = decl.value;
158-
const urlRegex = /url\(\s*(?:"([^"]+)"|'([^']+)'|(.+?))\s*\)/g;
158+
const urlRegex = /url(?:\(\s*['"]?)(.*?)(?:['"]?\s*\))/g;
159159
const segments: string[] = [];
160160

161161
let match;
@@ -168,7 +168,7 @@ export default function (options?: PostcssCliResourcesOptions): Plugin {
168168

169169
// eslint-disable-next-line no-cond-assign
170170
while ((match = urlRegex.exec(value))) {
171-
const originalUrl = match[1] || match[2] || match[3];
171+
const originalUrl = match[1];
172172
let processedUrl;
173173
try {
174174
processedUrl = await process(originalUrl, context, resourceCache);

0 commit comments

Comments
 (0)