throw ToolExit
when --web-port
is an integer outside the valid TCP port range (#123269)
throw `ToolExit` when `--web-port` is an integer outside the valid TCP port range
This commit is contained in:
parent
be008aef86
commit
66e6acbe9f
@ -179,7 +179,7 @@ class WebAssetServer implements AssetReader {
|
|||||||
static Future<WebAssetServer> start(
|
static Future<WebAssetServer> start(
|
||||||
ChromiumLauncher? chromiumLauncher,
|
ChromiumLauncher? chromiumLauncher,
|
||||||
String hostname,
|
String hostname,
|
||||||
int? port,
|
int port,
|
||||||
UrlTunneller? urlTunneller,
|
UrlTunneller? urlTunneller,
|
||||||
bool useSseForDebugProxy,
|
bool useSseForDebugProxy,
|
||||||
bool useSseForDebugBackend,
|
bool useSseForDebugBackend,
|
||||||
@ -203,7 +203,7 @@ class WebAssetServer implements AssetReader {
|
|||||||
const int kMaxRetries = 4;
|
const int kMaxRetries = 4;
|
||||||
for (int i = 0; i <= kMaxRetries; i++) {
|
for (int i = 0; i <= kMaxRetries; i++) {
|
||||||
try {
|
try {
|
||||||
httpServer = await HttpServer.bind(address, port ?? await globals.os.findFreePort());
|
httpServer = await HttpServer.bind(address, port);
|
||||||
break;
|
break;
|
||||||
} on SocketException catch (e, s) {
|
} on SocketException catch (e, s) {
|
||||||
if (i >= kMaxRetries) {
|
if (i >= kMaxRetries) {
|
||||||
@ -638,7 +638,7 @@ class WebDevFS implements DevFS {
|
|||||||
/// server.
|
/// server.
|
||||||
WebDevFS({
|
WebDevFS({
|
||||||
required this.hostname,
|
required this.hostname,
|
||||||
required int? port,
|
required int port,
|
||||||
required this.packagesFilePath,
|
required this.packagesFilePath,
|
||||||
required this.urlTunneller,
|
required this.urlTunneller,
|
||||||
required this.useSseForDebugProxy,
|
required this.useSseForDebugProxy,
|
||||||
@ -671,7 +671,7 @@ class WebDevFS implements DevFS {
|
|||||||
final ChromiumLauncher? chromiumLauncher;
|
final ChromiumLauncher? chromiumLauncher;
|
||||||
final bool nullAssertions;
|
final bool nullAssertions;
|
||||||
final bool nativeNullAssertions;
|
final bool nativeNullAssertions;
|
||||||
final int? _port;
|
final int _port;
|
||||||
final NullSafetyMode nullSafetyMode;
|
final NullSafetyMode nullSafetyMode;
|
||||||
|
|
||||||
late WebAssetServer webAssetServer;
|
late WebAssetServer webAssetServer;
|
||||||
|
@ -28,6 +28,7 @@ import '../dart/language_version.dart';
|
|||||||
import '../devfs.dart';
|
import '../devfs.dart';
|
||||||
import '../device.dart';
|
import '../device.dart';
|
||||||
import '../flutter_plugins.dart';
|
import '../flutter_plugins.dart';
|
||||||
|
import '../globals.dart' as globals;
|
||||||
import '../project.dart';
|
import '../project.dart';
|
||||||
import '../reporting/reporting.dart';
|
import '../reporting/reporting.dart';
|
||||||
import '../resident_devtools_handler.dart';
|
import '../resident_devtools_handler.dart';
|
||||||
@ -254,15 +255,38 @@ class ResidentWebRunner extends ResidentRunner {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
return await asyncGuard(() async {
|
return await asyncGuard(() async {
|
||||||
|
Future<int> getPort() async {
|
||||||
|
if (debuggingOptions.port == null) {
|
||||||
|
return globals.os.findFreePort();
|
||||||
|
}
|
||||||
|
|
||||||
|
final int? port = int.tryParse(debuggingOptions.port ?? '');
|
||||||
|
|
||||||
|
if (port == null) {
|
||||||
|
logger.printError('''
|
||||||
|
Received a non-integer value for port: ${debuggingOptions.port}
|
||||||
|
A randomly-chosen available port will be used instead.
|
||||||
|
''');
|
||||||
|
return globals.os.findFreePort();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port < 0 || port > 65535) {
|
||||||
|
throwToolExit('''
|
||||||
|
Invalid port: ${debuggingOptions.port}
|
||||||
|
Please provide a valid TCP port (an integer between 0 and 65535, inclusive).
|
||||||
|
''');
|
||||||
|
}
|
||||||
|
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
final ExpressionCompiler? expressionCompiler =
|
final ExpressionCompiler? expressionCompiler =
|
||||||
debuggingOptions.webEnableExpressionEvaluation
|
debuggingOptions.webEnableExpressionEvaluation
|
||||||
? WebExpressionCompiler(device!.generator!, fileSystem: _fileSystem)
|
? WebExpressionCompiler(device!.generator!, fileSystem: _fileSystem)
|
||||||
: null;
|
: null;
|
||||||
device!.devFS = WebDevFS(
|
device!.devFS = WebDevFS(
|
||||||
hostname: debuggingOptions.hostname ?? 'localhost',
|
hostname: debuggingOptions.hostname ?? 'localhost',
|
||||||
port: debuggingOptions.port != null
|
port: await getPort(),
|
||||||
? int.tryParse(debuggingOptions.port!)
|
|
||||||
: null,
|
|
||||||
packagesFilePath: packagesFilePath,
|
packagesFilePath: packagesFilePath,
|
||||||
urlTunneller: _urlTunneller,
|
urlTunneller: _urlTunneller,
|
||||||
useSseForDebugProxy: debuggingOptions.webUseSseForDebugProxy,
|
useSseForDebugProxy: debuggingOptions.webUseSseForDebugProxy,
|
||||||
|
@ -1311,6 +1311,23 @@ flutter:
|
|||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testUsingContext('throws when port is an integer outside the valid TCP range', () async {
|
||||||
|
final BufferLogger logger = BufferLogger.test();
|
||||||
|
|
||||||
|
DebuggingOptions debuggingOptions = DebuggingOptions.enabled(BuildInfo.debug, port: '65536');
|
||||||
|
ResidentRunner residentWebRunner =
|
||||||
|
setUpResidentRunner(flutterDevice, logger: logger, debuggingOptions: debuggingOptions);
|
||||||
|
await expectToolExitLater(residentWebRunner.run(), matches('Invalid port: 65536.*'));
|
||||||
|
|
||||||
|
debuggingOptions = DebuggingOptions.enabled(BuildInfo.debug, port: '-1');
|
||||||
|
residentWebRunner =
|
||||||
|
setUpResidentRunner(flutterDevice, logger: logger, debuggingOptions: debuggingOptions);
|
||||||
|
await expectToolExitLater(residentWebRunner.run(), matches('Invalid port: -1.*'));
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
FileSystem: () => fileSystem,
|
||||||
|
ProcessManager: () => processManager,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ResidentRunner setUpResidentRunner(
|
ResidentRunner setUpResidentRunner(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user