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:
Siva Annamalai
2016-06-20 19:59:53 -07:00
parent 10c6ae2861
commit d41d5dc414
3 changed files with 41 additions and 9 deletions
+11
View File
@@ -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];
+1
View File
@@ -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
+29 -9
View File
@@ -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;
}