From fe8422cdff450941bc3ba4b120576e8822459df4 Mon Sep 17 00:00:00 2001 From: Pavel Ivanov Date: Tue, 11 Jan 2022 17:39:59 +0500 Subject: [PATCH] Remove leading and trailing white-spaces from section name (#63549) * Reproduce the issue with spaces around the section name * Remove leading and trailing whitespaces from section name --- .../src/IniStreamConfigurationProvider.cs | 4 ++-- .../tests/IniConfigurationTest.cs | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.Configuration.Ini/src/IniStreamConfigurationProvider.cs b/src/libraries/Microsoft.Extensions.Configuration.Ini/src/IniStreamConfigurationProvider.cs index a0c1d7b59bd02..ac71fc18f8507 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.Ini/src/IniStreamConfigurationProvider.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.Ini/src/IniStreamConfigurationProvider.cs @@ -50,9 +50,9 @@ public static IDictionary Read(Stream stream) { // remove the brackets #if NET - sectionPrefix = string.Concat(line.AsSpan(1, line.Length - 2), ConfigurationPath.KeyDelimiter); + sectionPrefix = string.Concat(line.AsSpan(1, line.Length - 2).Trim(), ConfigurationPath.KeyDelimiter); #else - sectionPrefix = line.Substring(1, line.Length - 2) + ConfigurationPath.KeyDelimiter; + sectionPrefix = line.Substring(1, line.Length - 2).Trim() + ConfigurationPath.KeyDelimiter; #endif continue; } diff --git a/src/libraries/Microsoft.Extensions.Configuration.Ini/tests/IniConfigurationTest.cs b/src/libraries/Microsoft.Extensions.Configuration.Ini/tests/IniConfigurationTest.cs index 18e4903c318b5..f7c91fc4c3bfa 100644 --- a/src/libraries/Microsoft.Extensions.Configuration.Ini/tests/IniConfigurationTest.cs +++ b/src/libraries/Microsoft.Extensions.Configuration.Ini/tests/IniConfigurationTest.cs @@ -160,6 +160,28 @@ public void SupportAndIgnoreComments() Assert.Equal("MySql", iniConfigSrc.Get("Data:Inventory:Provider")); } + [Fact] + public void ShouldRemoveLeadingAndTrailingWhiteSpacesFromKeyAndValue() + { + var ini = "[section]\n" + + " \t key \t = \t value\t "; + var iniConfigSrc = new IniConfigurationProvider(new IniConfigurationSource()); + iniConfigSrc.Load(TestStreamHelpers.StringToStream(ini)); + + Assert.Equal("value", iniConfigSrc.Get("section:key")); + } + + [Fact] + public void ShouldRemoveLeadingAndTrailingWhiteSpacesFromSectionName() + { + var ini = "[ \t section \t ]\n" + + "key=value"; + var iniConfigSrc = new IniConfigurationProvider(new IniConfigurationSource()); + iniConfigSrc.Load(TestStreamHelpers.StringToStream(ini)); + + Assert.Equal("value", iniConfigSrc.Get("section:key")); + } + [Fact] public void ThrowExceptionWhenFoundInvalidLine() {