mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
Merge branch 'fix/install_input_validation_v5.4' into 'release/v5.4'
fix(idf_tools): Validate input features (v5.4) See merge request espressif/esp-idf!37889
This commit is contained in:
@ -1783,14 +1783,24 @@ def process_and_check_features(idf_env_obj: IDFEnv, features_str: str) -> List[s
|
|||||||
"""
|
"""
|
||||||
new_features = []
|
new_features = []
|
||||||
remove_features = []
|
remove_features = []
|
||||||
for new_feature_candidate in features_str.split(','):
|
invalid_features = []
|
||||||
|
|
||||||
|
for new_feature_candidate in [feature for feature in features_str.split(',') if feature != '']:
|
||||||
|
# Feature to be added/removed needs to be checked if valid
|
||||||
|
sanitized_feat = new_feature_candidate.lstrip('-+')
|
||||||
|
if not os.path.isfile(feature_to_requirements_path(sanitized_feat)):
|
||||||
|
invalid_features += [sanitized_feat]
|
||||||
|
continue
|
||||||
|
|
||||||
if new_feature_candidate.startswith('-'):
|
if new_feature_candidate.startswith('-'):
|
||||||
remove_features += [new_feature_candidate.lstrip('-')]
|
remove_features += [new_feature_candidate.lstrip('-')]
|
||||||
else:
|
else:
|
||||||
new_feature_candidate = new_feature_candidate.lstrip('+')
|
new_features += [new_feature_candidate.lstrip('+')]
|
||||||
# Feature to be added needs to be checked if is valid
|
|
||||||
if os.path.isfile(feature_to_requirements_path(new_feature_candidate)):
|
if invalid_features:
|
||||||
new_features += [new_feature_candidate]
|
fatal(f'The following selected features are not valid: {", ".join(invalid_features)}')
|
||||||
|
raise SystemExit(1)
|
||||||
|
|
||||||
idf_env_obj.get_active_idf_record().update_features(tuple(new_features), tuple(remove_features))
|
idf_env_obj.get_active_idf_record().update_features(tuple(new_features), tuple(remove_features))
|
||||||
return idf_env_obj.get_active_idf_record().features
|
return idf_env_obj.get_active_idf_record().features
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
# This script is used from the $IDF_PATH/install.* scripts. This way the argument parsing can be done at one place and
|
# This script is used from the $IDF_PATH/install.* scripts. This way the argument parsing can be done at one place and
|
||||||
@ -13,19 +13,22 @@ from itertools import chain
|
|||||||
|
|
||||||
def action_extract_features(args: str) -> None:
|
def action_extract_features(args: str) -> None:
|
||||||
"""
|
"""
|
||||||
Command line arguments starting with "--enable-" or "--disable" are features. This function selects those, add them signs '+' or '-' and prints them.
|
Command line arguments starting with "--enable-" or "--disable-" are features.
|
||||||
|
This function selects those, adds them a '+' or '-' sign and prints them.
|
||||||
"""
|
"""
|
||||||
features = ['+core'] # "core" features should be always installed
|
features = ['+core'] # "core" features should be always installed
|
||||||
|
|
||||||
if args:
|
if args:
|
||||||
arg_enable_prefix = '--enable-'
|
arg_enable_prefix = '--enable-'
|
||||||
arg_disable_prefix = '--disable-'
|
arg_disable_prefix = '--disable-'
|
||||||
# features to be enabled has prefix '+', disabled has prefix '-'
|
# features to be enabled have prefix '+', disabled have prefix '-'
|
||||||
for arg in args.split():
|
for arg in args.split():
|
||||||
if arg.startswith(arg_enable_prefix):
|
if arg.startswith(arg_enable_prefix):
|
||||||
features.append('+' + arg[len(arg_enable_prefix):])
|
features.append('+' + arg[len(arg_enable_prefix):])
|
||||||
elif arg.startswith(arg_disable_prefix):
|
elif arg.startswith(arg_disable_prefix):
|
||||||
features.append('-' + arg[len(arg_disable_prefix):])
|
features.append('-' + arg[len(arg_disable_prefix):])
|
||||||
|
elif arg.startswith('-'):
|
||||||
|
raise SystemExit(f'ERROR: Invalid feature specifier: {arg}')
|
||||||
features = list(set(features))
|
features = list(set(features))
|
||||||
|
|
||||||
print(','.join(features))
|
print(','.join(features))
|
||||||
@ -75,7 +78,7 @@ optional arguments:
|
|||||||
{help_opts} show this help message and exit
|
{help_opts} show this help message and exit
|
||||||
|
|
||||||
For more information, please see https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/tools/idf-tools.html#install-scripts
|
For more information, please see https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/tools/idf-tools.html#install-scripts
|
||||||
""")
|
""") # noqa: E222
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
|
Reference in New Issue
Block a user