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(
|
||||
ChromiumLauncher? chromiumLauncher,
|
||||
String hostname,
|
||||
int? port,
|
||||
int port,
|
||||
UrlTunneller? urlTunneller,
|
||||
bool useSseForDebugProxy,
|
||||
bool useSseForDebugBackend,
|
||||
@ -203,7 +203,7 @@ class WebAssetServer implements AssetReader {
|
||||
const int kMaxRetries = 4;
|
||||
for (int i = 0; i <= kMaxRetries; i++) {
|
||||
try {
|
||||
httpServer = await HttpServer.bind(address, port ?? await globals.os.findFreePort());
|
||||
httpServer = await HttpServer.bind(address, port);
|
||||
break;
|
||||
} on SocketException catch (e, s) {
|
||||
if (i >= kMaxRetries) {
|
||||
@ -638,7 +638,7 @@ class WebDevFS implements DevFS {
|
||||
/// server.
|
||||
WebDevFS({
|
||||
required this.hostname,
|
||||
required int? port,
|
||||
required int port,
|
||||
required this.packagesFilePath,
|
||||
required this.urlTunneller,
|
||||
required this.useSseForDebugProxy,
|
||||
@ -671,7 +671,7 @@ class WebDevFS implements DevFS {
|
||||
final ChromiumLauncher? chromiumLauncher;
|
||||
final bool nullAssertions;
|
||||
final bool nativeNullAssertions;
|
||||
final int? _port;
|
||||
final int _port;
|
||||
final NullSafetyMode nullSafetyMode;
|
||||
|
||||
late WebAssetServer webAssetServer;
|
||||
|
@ -28,6 +28,7 @@ import '../dart/language_version.dart';
|
||||
import '../devfs.dart';
|
||||
import '../device.dart';
|
||||
import '../flutter_plugins.dart';
|
||||
import '../globals.dart' as globals;
|
||||
import '../project.dart';
|
||||
import '../reporting/reporting.dart';
|
||||
import '../resident_devtools_handler.dart';
|
||||
@ -254,15 +255,38 @@ class ResidentWebRunner extends ResidentRunner {
|
||||
|
||||
try {
|
||||
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 =
|
||||
debuggingOptions.webEnableExpressionEvaluation
|
||||
? WebExpressionCompiler(device!.generator!, fileSystem: _fileSystem)
|
||||
: null;
|
||||
device!.devFS = WebDevFS(
|
||||
hostname: debuggingOptions.hostname ?? 'localhost',
|
||||
port: debuggingOptions.port != null
|
||||
? int.tryParse(debuggingOptions.port!)
|
||||
: null,
|
||||
port: await getPort(),
|
||||
packagesFilePath: packagesFilePath,
|
||||
urlTunneller: _urlTunneller,
|
||||
useSseForDebugProxy: debuggingOptions.webUseSseForDebugProxy,
|
||||
|
@ -1311,6 +1311,23 @@ flutter:
|
||||
FileSystem: () => fileSystem,
|
||||
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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user