From c5083aaf9439c3b7c1bef5f062bbadc4b9e68310 Mon Sep 17 00:00:00 2001 From: Catherine Date: Thu, 7 Dec 2023 23:46:43 +0000 Subject: [PATCH 1/2] fix: make getChildEntry recursively traverse the path --- packages/preview2-shim/lib/browser/filesystem.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/preview2-shim/lib/browser/filesystem.js b/packages/preview2-shim/lib/browser/filesystem.js index 2ac9d67f8..b58b2ac68 100644 --- a/packages/preview2-shim/lib/browser/filesystem.js +++ b/packages/preview2-shim/lib/browser/filesystem.js @@ -37,15 +37,18 @@ function getChildEntry (parentEntry, subpath, openFlags) { let segmentIdx; do { if (!entry || !entry.dir) throw 'not-directory'; - segmentIdx = subpath.indexOf('/'); + segmentIdx = subpath.indexOf('/', segmentIdx); const segment = segmentIdx === -1 ? subpath : subpath.slice(0, segmentIdx); - if (segment === '.' || segment === '') return entry; - if (segment === '..') throw 'no-entry'; - if (!entry.dir[segment] && openFlags.create) + if (segment === '.' || segment === '') + entry = entry; + else if (segment === '..') + throw 'no-entry'; + else if (!entry.dir[segment] && openFlags.create) entry = entry.dir[segment] = openFlags.directory ? { dir: {} } : { source: new Uint8Array([]) }; else entry = entry.dir[segment]; - } while (segmentIdx !== -1) + subpath = subpath.substring(segmentIdx + 1); + } while (segmentIdx !== -1); if (!entry) throw 'no-entry'; return entry; } From af64e63038b70cdc475b4b6d7eb399d35aafd026 Mon Sep 17 00:00:00 2001 From: Catherine Date: Thu, 7 Dec 2023 23:50:41 +0000 Subject: [PATCH 2/2] fix: don't assign `entry = entry;` --- packages/preview2-shim/lib/browser/filesystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preview2-shim/lib/browser/filesystem.js b/packages/preview2-shim/lib/browser/filesystem.js index b58b2ac68..473efccf7 100644 --- a/packages/preview2-shim/lib/browser/filesystem.js +++ b/packages/preview2-shim/lib/browser/filesystem.js @@ -40,7 +40,7 @@ function getChildEntry (parentEntry, subpath, openFlags) { segmentIdx = subpath.indexOf('/', segmentIdx); const segment = segmentIdx === -1 ? subpath : subpath.slice(0, segmentIdx); if (segment === '.' || segment === '') - entry = entry; + /* continue traversing */; else if (segment === '..') throw 'no-entry'; else if (!entry.dir[segment] && openFlags.create)