From 28d707693b5ecd2c562e7e534d0023d0e04efdb2 Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Tue, 21 Mar 2023 19:05:24 -0700 Subject: [PATCH] toolexit on malformed yaml (#123167) [flutter_tools] toolexit on malformed yaml during gen-l10n --- .../src/localizations/localizations_utils.dart | 8 +++++++- .../build_system/targets/localizations_test.dart | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart index 7a53e83e54..224baa20ec 100644 --- a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart +++ b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart @@ -5,6 +5,7 @@ import 'package:meta/meta.dart'; import 'package:yaml/yaml.dart'; +import '../base/common.dart'; import '../base/file_system.dart'; import '../base/logger.dart'; import 'gen_l10n_types.dart'; @@ -436,7 +437,12 @@ LocalizationOptions parseLocalizationsOptions({ if (contents.trim().isEmpty) { return const LocalizationOptions(); } - final YamlNode yamlNode = loadYamlNode(file.readAsStringSync()); + final YamlNode yamlNode; + try { + yamlNode = loadYamlNode(file.readAsStringSync()); + } on YamlException catch (err) { + throwToolExit(err.message); + } if (yamlNode is! YamlMap) { logger.printError('Expected ${file.path} to contain a map, instead was $yamlNode'); throw Exception(); diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/localizations_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/localizations_test.dart index 4e07a525c8..3bc5a9baba 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/localizations_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/localizations_test.dart @@ -98,4 +98,19 @@ use-deferred-loading: string throwsException, ); }); + + testWithoutContext('parseLocalizationsOptions tool exits on malformed Yaml', () async { + final FileSystem fileSystem = MemoryFileSystem.test(); + final File configFile = fileSystem.file('l10n.yaml')..writeAsStringSync(''' +template-arb-file: {name}_en.arb +'''); + + expect( + () => parseLocalizationsOptions( + file: configFile, + logger: BufferLogger.test(), + ), + throwsToolExit(), + ); + }); }