Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 4d88449

Browse files
committed
Signal an error if an Isolate.spawnUri call uses an unsupported URI
Fixes flutter/flutter#76371
1 parent e06dbeb commit 4d88449

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

common/settings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ struct Settings {
118118

119119
// Used as the script URI in debug messages. Does not affect how the Dart code
120120
// is executed.
121-
std::string advisory_script_uri = "main.dart";
121+
std::string advisory_script_uri = "file:///main.dart";
122122
// Used as the script entrypoint in debug messages. Does not affect how the
123123
// Dart code is executed.
124124
std::string advisory_script_entrypoint = "main";

runtime/dart_isolate.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,14 @@ Dart_Isolate DartIsolate::DartIsolateGroupCreateCallback(
929929
DartIsolateGroupData& parent_group_data =
930930
(*parent_isolate_data)->GetIsolateGroupData();
931931

932+
if (parent_group_data.GetSettings().advisory_script_uri !=
933+
advisory_script_uri) {
934+
std::string error_msg =
935+
std::string("Unsupported isolate URI: ") + advisory_script_uri;
936+
*error = fml::strdup(error_msg.c_str());
937+
return nullptr;
938+
}
939+
932940
auto isolate_group_data =
933941
std::make_unique<std::shared_ptr<DartIsolateGroupData>>(
934942
std::shared_ptr<DartIsolateGroupData>(new DartIsolateGroupData(

testing/dart/isolate_test.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:async';
6+
import 'dart:isolate';
7+
8+
import 'package:test/test.dart';
9+
10+
void main() {
11+
test('Invalid isolate URI', () async {
12+
Future<Isolate> isolate = Isolate.spawnUri(Uri.parse('http://127.0.0.1/foo.dart'), [], null);
13+
expect(() async => await isolate, throwsA(const TypeMatcher<IsolateSpawnException>()));
14+
});
15+
}

0 commit comments

Comments
 (0)