From 822a00c4d508b54f650933a73ca5f4a3af9a7983 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 7 Sep 2023 21:07:00 -0800 Subject: Fix a couple important bugs (#4560) --- src/bun.js/bindings/ImportMetaObject.cpp | 58 +++++++++++++++++++------------- 1 file changed, 35 insertions(+), 23 deletions(-) (limited to 'src/bun.js/bindings/ImportMetaObject.cpp') diff --git a/src/bun.js/bindings/ImportMetaObject.cpp b/src/bun.js/bindings/ImportMetaObject.cpp index c53235824..4160102a5 100644 --- a/src/bun.js/bindings/ImportMetaObject.cpp +++ b/src/bun.js/bindings/ImportMetaObject.cpp @@ -457,14 +457,20 @@ void ImportMetaObject::finishCreation(VM& vm) ImportMetaObject* meta = jsCast(init.owner); WTF::URL url = meta->url.startsWith('/') ? WTF::URL::fileURLWithFileSystemPath(meta->url) : WTF::URL(meta->url); - WTF::StringView path; - if (url.protocolIs("file"_s)) { - path = url.fileSystemPath(); + WTF::String path; + + if (url.isValid()) { + + if (url.protocolIs("file"_s)) { + path = url.fileSystemPath(); + } else { + path = url.path().toString(); + } } else { - path = url.path(); + path = meta->url; } - JSFunction* value = jsCast(Bun::JSCommonJSModule::createBoundRequireFunction(init.vm, meta->globalObject(), path.toString())); + JSFunction* value = jsCast(Bun::JSCommonJSModule::createBoundRequireFunction(init.vm, meta->globalObject(), path)); init.set(value); }); this->urlProperty.initLater([](const JSC::LazyProperty::Initializer& init) { @@ -477,12 +483,14 @@ void ImportMetaObject::finishCreation(VM& vm) ImportMetaObject* meta = jsCast(init.owner); WTF::URL url = meta->url.startsWith('/') ? WTF::URL::fileURLWithFileSystemPath(meta->url) : WTF::URL(meta->url); - WTF::StringView dirname; + WTF::String dirname; - if (url.protocolIs("file"_s)) { - dirname = url.fileSystemPath(); - } else { - dirname = url.path(); + if (url.isValid()) { + if (url.protocolIs("file"_s)) { + dirname = url.fileSystemPath(); + } else { + dirname = url.path().toString(); + } } if (dirname.endsWith("/"_s)) { @@ -491,20 +499,25 @@ void ImportMetaObject::finishCreation(VM& vm) dirname = dirname.substring(0, dirname.reverseFind('/')); } - init.set(jsString(init.vm, dirname.toString())); + init.set(jsString(init.vm, dirname)); }); this->fileProperty.initLater([](const JSC::LazyProperty::Initializer& init) { ImportMetaObject* meta = jsCast(init.owner); WTF::URL url = meta->url.startsWith('/') ? WTF::URL::fileURLWithFileSystemPath(meta->url) : WTF::URL(meta->url); - WTF::StringView path; - if (url.protocolIs("file"_s)) { - path = url.fileSystemPath(); + WTF::String path; + + if (!url.isValid()) { + path = meta->url; } else { - path = url.path(); + if (url.protocolIs("file"_s)) { + path = url.fileSystemPath(); + } else { + path = url.path().toString(); + } } - WTF::StringView filename; + WTF::String filename; if (path.endsWith("/"_s)) { filename = path.substring(path.reverseFind('/', path.length() - 2) + 1); @@ -512,21 +525,20 @@ void ImportMetaObject::finishCreation(VM& vm) filename = path.substring(path.reverseFind('/') + 1); } - init.set(jsString(init.vm, filename.toString())); + init.set(jsString(init.vm, filename)); }); this->pathProperty.initLater([](const JSC::LazyProperty::Initializer& init) { ImportMetaObject* meta = jsCast(init.owner); WTF::URL url = meta->url.startsWith('/') ? WTF::URL::fileURLWithFileSystemPath(meta->url) : WTF::URL(meta->url); - WTF::StringView path; - if (url.protocolIs("file"_s)) { - path = url.fileSystemPath(); + if (!url.isValid()) { + init.set(jsString(init.vm, meta->url)); + } else if (url.protocolIs("file"_s)) { + init.set(jsString(init.vm, url.fileSystemPath())); } else { - path = url.path(); + init.set(jsString(init.vm, url.path())); } - - init.set(jsString(init.vm, path.toString())); }); } -- cgit v1.2.3