Do not use Dart_DefaultCanonicalizeUrl for resolving a script uri in the current working directory as that code has not been written to handle paths on windows.
Review URL: https://codereview.chromium.org/2081853004 .
This commit is contained in:
@@ -335,6 +335,17 @@ Dart_Handle DartUtils::SetWorkingDirectory() {
|
||||
}
|
||||
|
||||
|
||||
Dart_Handle DartUtils::ResolveUriInWorkingDirectory(Dart_Handle script_uri) {
|
||||
const int kNumArgs = 1;
|
||||
Dart_Handle dart_args[kNumArgs];
|
||||
dart_args[0] = script_uri;
|
||||
return Dart_Invoke(DartUtils::BuiltinLib(),
|
||||
NewString("_resolveInWorkingDirectory"),
|
||||
kNumArgs,
|
||||
dart_args);
|
||||
}
|
||||
|
||||
|
||||
Dart_Handle DartUtils::LibraryFilePath(Dart_Handle library_uri) {
|
||||
const int kNumArgs = 1;
|
||||
Dart_Handle dart_args[kNumArgs];
|
||||
|
||||
@@ -197,6 +197,7 @@ class DartUtils {
|
||||
|
||||
static const char* MapLibraryUrl(const char* url_string);
|
||||
|
||||
static Dart_Handle ResolveUriInWorkingDirectory(Dart_Handle script_uri);
|
||||
static Dart_Handle ResolveScript(Dart_Handle url);
|
||||
|
||||
// Sniffs the specified text_buffer to see if it contains the magic number
|
||||
|
||||
@@ -451,12 +451,36 @@ static Dart_Handle LoadUrlContents(const char* uri_string) {
|
||||
}
|
||||
|
||||
|
||||
static Dart_Handle ResolveUriInWorkingDirectory(const char* script_uri) {
|
||||
bool failed = false;
|
||||
char* result_string = NULL;
|
||||
|
||||
{
|
||||
UriResolverIsolateScope scope;
|
||||
|
||||
// Run DartUtils::ResolveUriInWorkingDirectory in context of uri resolver
|
||||
// isolate.
|
||||
Dart_Handle result = DartUtils::ResolveUriInWorkingDirectory(
|
||||
DartUtils::NewString(script_uri));
|
||||
if (Dart_IsError(result)) {
|
||||
failed = true;
|
||||
result_string = strdup(Dart_GetError(result));
|
||||
} else {
|
||||
result_string = strdup(DartUtils::GetStringValue(result));
|
||||
}
|
||||
}
|
||||
|
||||
Dart_Handle result = failed ? Dart_NewApiError(result_string) :
|
||||
DartUtils::NewString(result_string);
|
||||
free(result_string);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static Dart_Handle LoadSnapshotCreationScript(const char* script_name) {
|
||||
// First resolve the specified script uri with respect to the original
|
||||
// working directory.
|
||||
Dart_Handle resolved_uri = Dart_DefaultCanonicalizeUrl(
|
||||
DartUtils::GetCanonicalizableWorkingDirectory(),
|
||||
Dart_NewStringFromCString(script_name));
|
||||
Dart_Handle resolved_uri = ResolveUriInWorkingDirectory(script_name);
|
||||
if (Dart_IsError(resolved_uri)) {
|
||||
return resolved_uri;
|
||||
}
|
||||
@@ -499,9 +523,7 @@ static Dart_Handle CreateSnapshotLibraryTagHandler(Dart_LibraryTag tag,
|
||||
const char* mapped_library_url_string = DartUtils::MapLibraryUrl(
|
||||
library_url_string);
|
||||
if (mapped_library_url_string != NULL) {
|
||||
library_url = Dart_DefaultCanonicalizeUrl(
|
||||
DartUtils::GetCanonicalizableWorkingDirectory(),
|
||||
Dart_NewStringFromCString(mapped_library_url_string));
|
||||
library_url = ResolveUriInWorkingDirectory(mapped_library_url_string);
|
||||
library_url_string = DartUtils::GetStringValue(library_url);
|
||||
}
|
||||
|
||||
@@ -546,9 +568,7 @@ static Dart_Handle CreateSnapshotLibraryTagHandler(Dart_LibraryTag tag,
|
||||
Dart_Handle resolved_url = url;
|
||||
if (mapped_url_string != NULL) {
|
||||
// Mapped urls are relative to working directory.
|
||||
resolved_url = Dart_DefaultCanonicalizeUrl(
|
||||
DartUtils::GetCanonicalizableWorkingDirectory(),
|
||||
Dart_NewStringFromCString(mapped_url_string));
|
||||
resolved_url = ResolveUriInWorkingDirectory(mapped_url_string);
|
||||
if (Dart_IsError(resolved_url)) {
|
||||
return resolved_url;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user