From e9bd2ef0872be46121a08693c8671fdf29914fe8 Mon Sep 17 00:00:00 2001 From: Zachary Anderson Date: Mon, 26 Aug 2019 12:12:50 -0700 Subject: [PATCH] [flutter_tool] Some additional input validation for 'version' (#39136) --- packages/flutter_tools/lib/src/commands/version.dart | 4 ++++ .../test/general.shard/commands/version_test.dart | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/packages/flutter_tools/lib/src/commands/version.dart b/packages/flutter_tools/lib/src/commands/version.dart index ed71c55a104..0fb9e908cad 100644 --- a/packages/flutter_tools/lib/src/commands/version.dart +++ b/packages/flutter_tools/lib/src/commands/version.dart @@ -65,6 +65,10 @@ class VersionCommand extends FlutterCommand { // check min supported version final Version targetVersion = Version.parse(version); + if (targetVersion == null) { + throwToolExit('Failed to parse version "$version"'); + } + bool withForce = false; if (targetVersion < minSupportedVersion) { if (!argResults['force']) { diff --git a/packages/flutter_tools/test/general.shard/commands/version_test.dart b/packages/flutter_tools/test/general.shard/commands/version_test.dart index c09ff6900bc..647e6571552 100644 --- a/packages/flutter_tools/test/general.shard/commands/version_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/version_test.dart @@ -62,6 +62,16 @@ void main() { ProcessManager: () => MockProcessManager(), }); + testUsingContext('tool exit on confusing version', () async { + const String version = 'master'; + final VersionCommand command = VersionCommand(); + final Future runCommand = createTestCommandRunner(command).run(['version', version]); + expect(() async => await Future.wait(>[runCommand]), + throwsA(isInstanceOf())); + }, overrides: { + ProcessManager: () => MockProcessManager(), + }); + testUsingContext('exit tool if can\'t get the tags', () async { final VersionCommand command = VersionCommand();