Merge pull request #363 from prasanthsasikumar/upstream/fix-file-uri-slashes

fix(remotion): correct file:// URI slash count for POSIX absolute paths
This commit is contained in:
Calesthio
2026-07-12 10:46:05 -07:00
committed by GitHub
6 changed files with 54 additions and 6 deletions

View File

@@ -19,7 +19,15 @@ function resolveAsset(src: string): string {
}
const clean = src.replace(/^file:\/\/\/?/, "");
if (clean.startsWith("/") || /^[A-Za-z]:[/\\]/.test(clean)) {
return `file:///${clean.replace(/\\/g, "/")}`;
const posix = clean.replace(/\\/g, "/");
// POSIX absolute paths already have a leading "/" — file:// + posix
// gives exactly three slashes. Windows drive paths (C:/...) need the
// extra slash added explicitly. Do not merge these branches — adding
// "file:///" unconditionally double-slashes POSIX paths (file:////...).
if (posix.startsWith("/")) {
return `file://${posix}`;
}
return `file:///${posix}`;
}
return staticFile(clean);
}

View File

@@ -26,7 +26,15 @@ function resolveAsset(src: string): string {
if (src.startsWith("http://") || src.startsWith("https://") || src.startsWith("data:")) return src;
const clean = src.replace(/^file:\/\/\/?/, "");
if (clean.startsWith("/") || /^[A-Za-z]:[\\/]/.test(clean)) {
return `file:///${clean.replace(/\\/g, "/")}`;
const posix = clean.replace(/\\/g, "/");
// POSIX absolute paths already have a leading "/" — file:// + posix
// gives exactly three slashes. Windows drive paths (C:/...) need the
// extra slash added explicitly. Do not merge these branches — adding
// "file:///" unconditionally double-slashes POSIX paths (file:////...).
if (posix.startsWith("/")) {
return `file://${posix}`;
}
return `file:///${posix}`;
}
return staticFile(clean);
}

View File

@@ -22,7 +22,15 @@ function resolveAsset(src: string): string {
// Absolute paths (Unix: /foo, Windows: C:\foo or C:/foo) — convert to file:// URI
// staticFile() only accepts relative paths within public/, so absolute paths must bypass it
if (clean.startsWith("/") || /^[A-Za-z]:[\\/]/.test(clean)) {
return `file:///${clean.replace(/\\/g, "/")}`;
const posix = clean.replace(/\\/g, "/");
// POSIX absolute paths already have a leading "/" — file:// + posix
// gives exactly three slashes. Windows drive paths (C:/...) need the
// extra slash added explicitly. Do not merge these branches — adding
// "file:///" unconditionally double-slashes POSIX paths (file:////...).
if (posix.startsWith("/")) {
return `file://${posix}`;
}
return `file:///${posix}`;
}
return staticFile(clean);
}

View File

@@ -19,7 +19,15 @@ function resolveAsset(src: string): string {
if (src.startsWith("http://") || src.startsWith("https://") || src.startsWith("data:")) return src;
const clean = src.replace(/^file:\/\/\/?/, "");
if (clean.startsWith("/") || /^[A-Za-z]:[\\/]/.test(clean)) {
return `file:///${clean.replace(/\\/g, "/")}`;
const posix = clean.replace(/\\/g, "/");
// POSIX absolute paths already have a leading "/" — file:// + posix
// gives exactly three slashes. Windows drive paths (C:/...) need the
// extra slash added explicitly. Do not merge these branches — adding
// "file:///" unconditionally double-slashes POSIX paths (file:////...).
if (posix.startsWith("/")) {
return `file://${posix}`;
}
return `file:///${posix}`;
}
return staticFile(clean);
}

View File

@@ -46,7 +46,15 @@ function resolveAsset(src: string): string {
}
const clean = src.replace(/^file:\/\/\/?/, "");
if (clean.startsWith("/") || /^[A-Za-z]:[\\/]/.test(clean)) {
return `file:///${clean.replace(/\\/g, "/")}`;
const posix = clean.replace(/\\/g, "/");
// POSIX absolute paths already have a leading "/" — file:// + posix
// gives exactly three slashes. Windows drive paths (C:/...) need the
// extra slash added explicitly. Do not merge these branches — adding
// "file:///" unconditionally double-slashes POSIX paths (file:////...).
if (posix.startsWith("/")) {
return `file://${posix}`;
}
return `file:///${posix}`;
}
return staticFile(clean);
}

View File

@@ -90,7 +90,15 @@ function resolveAsset(src: string): string {
}
const clean = src.replace(/^file:\/\/\/?/, "");
if (clean.startsWith("/") || /^[A-Za-z]:[\\/]/.test(clean)) {
return `file:///${clean.replace(/\\/g, "/")}`;
const posix = clean.replace(/\\/g, "/");
// POSIX absolute paths already have a leading "/" — file:// + posix
// gives exactly three slashes. Windows drive paths (C:/...) need the
// extra slash added explicitly. Do not merge these branches — adding
// "file:///" unconditionally double-slashes POSIX paths (file:////...).
if (posix.startsWith("/")) {
return `file://${posix}`;
}
return `file:///${posix}`;
}
return staticFile(clean);
}