Treat empty config subsection values as empty dicts#3641
Open
norus wants to merge 1 commit intoboto:developfrom
Open
Treat empty config subsection values as empty dicts#3641norus wants to merge 1 commit intoboto:developfrom
norus wants to merge 1 commit intoboto:developfrom
Conversation
When a config file contains an empty subsection key such as 's3 ='
with no value or indented block following it, the INI parser returns
an empty string. Downstream code that calls .get('s3', {}).get(...)
on the parsed config raises AttributeError because str has no .get()
method, producing the cryptic message:
'str' object has no attribute 'get'
This error surfaces for any AWS CLI command, not just S3, because
botocore checks the s3 config for dualstack endpoint settings during
client construction.
Treat empty string values as empty dicts when parse_subsections is
enabled, matching the logical meaning of an empty subsection block.
Fixes aws/aws-cli#9469
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
When a config file contains an empty subsection key such as
s3 =with no value or indented block following it, the INI parser returns an empty string. Downstream code that calls.get('s3', {}).get(...)on the parsed config raisesAttributeErrorbecausestrhas no.get()method, producing the cryptic message:This error surfaces for any AWS CLI command, not just S3, because botocore checks the s3 config for dualstack endpoint settings during client construction.
Fix
In
raw_config_parse(), whenparse_subsectionsis enabled and a config value is an empty string, treat it as an empty dict{}rather than storing the raw empty string. This matches the logical meaning of an empty subsection block.Reproduction
After fix, the command proceeds normally (no config parse error for the empty s3 block).
Testing
aws_config_nested_emptytest_nested_hierarchy_with_empty_subsection: verifies emptys3=produces{}test_nested_hierarchy_empty_subsection_allows_get: verifies downstream.get()chain worksFixes aws/aws-cli#9469