Skip to content

Commit 2d115bf

Browse files
committed
fix(rsc-mf): guard fallback helper against invalid origins
1 parent 7fc15bf commit 2d115bf

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

tests/integration/rsc-mf/shared/manifestFallback.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,21 @@ export const createManifestFallbackAssetUrl = ({
103103
requestedAssetDirectory: string;
104104
requestUrl?: string;
105105
}) => {
106+
let remoteOriginUrl: URL;
107+
try {
108+
remoteOriginUrl = new URL(remoteOrigin);
109+
} catch {
110+
return undefined;
111+
}
112+
106113
let fallbackAssetUrl: URL;
107114
try {
108-
fallbackAssetUrl = new URL(fallbackAssetPath, `${remoteOrigin}/`);
115+
fallbackAssetUrl = new URL(fallbackAssetPath, `${remoteOriginUrl.origin}/`);
109116
} catch {
110117
return undefined;
111118
}
112119

113-
if (fallbackAssetUrl.origin !== new URL(remoteOrigin).origin) {
120+
if (fallbackAssetUrl.origin !== remoteOriginUrl.origin) {
114121
return undefined;
115122
}
116123
const normalizedFallbackPathname = fallbackAssetUrl.pathname.replace(

tests/integration/rsc-mf/tests/manifestFallback.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,15 @@ describe('manifest fallback shared helpers', () => {
139139
});
140140

141141
it('rejects unsafe fallback URLs', () => {
142+
expect(
143+
createManifestFallbackAssetUrl({
144+
remoteOrigin: 'not-a-valid-origin',
145+
fallbackAssetPath:
146+
'static/js/async/__federation_expose_RemoteClientCounter.7745fe5f0a.js',
147+
requestSearch: '',
148+
requestedAssetDirectory: 'static/js/async/',
149+
}),
150+
).toBeUndefined();
142151
expect(
143152
createManifestFallbackAssetUrl({
144153
remoteOrigin: 'http://127.0.0.1:3999',

0 commit comments

Comments
 (0)