From e7745c94f8ca78d4c7892968ca1a1b00326a7bbd Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Mon, 11 Sep 2023 00:15:51 +0800 Subject: [PATCH] Fix INI parsing for value with trailing slash (#26995) Fix #26977 (a temp fix) --- modules/setting/config_provider.go | 12 ++++++++++-- modules/setting/config_provider_test.go | 10 ++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/modules/setting/config_provider.go b/modules/setting/config_provider.go index d00164df9..8d6428628 100644 --- a/modules/setting/config_provider.go +++ b/modules/setting/config_provider.go @@ -174,9 +174,16 @@ func (s *iniConfigSection) ChildSections() (sections []ConfigSection) { return sections } +func configProviderLoadOptions() ini.LoadOptions { + return ini.LoadOptions{ + KeyValueDelimiterOnWrite: " = ", + IgnoreContinuation: true, + } +} + // NewConfigProviderFromData this function is mainly for testing purpose func NewConfigProviderFromData(configContent string) (ConfigProvider, error) { - cfg, err := ini.Load(strings.NewReader(configContent)) + cfg, err := ini.LoadSources(configProviderLoadOptions(), strings.NewReader(configContent)) if err != nil { return nil, err } @@ -190,7 +197,7 @@ func NewConfigProviderFromData(configContent string) (ConfigProvider, error) { // NewConfigProviderFromFile load configuration from file. // NOTE: do not print any log except error. func NewConfigProviderFromFile(file string, extraConfigs ...string) (ConfigProvider, error) { - cfg := ini.Empty(ini.LoadOptions{KeyValueDelimiterOnWrite: " = "}) + cfg := ini.Empty(configProviderLoadOptions()) loadedFromEmpty := true if file != "" { @@ -339,6 +346,7 @@ func NewConfigProviderForLocale(source any, others ...any) (ConfigProvider, erro iniFile, err := ini.LoadSources(ini.LoadOptions{ IgnoreInlineComment: true, UnescapeValueCommentSymbols: true, + IgnoreContinuation: true, }, source, others...) if err != nil { return nil, fmt.Errorf("unable to load locale ini: %w", err) diff --git a/modules/setting/config_provider_test.go b/modules/setting/config_provider_test.go index 7e7c6be2b..a666d124c 100644 --- a/modules/setting/config_provider_test.go +++ b/modules/setting/config_provider_test.go @@ -30,6 +30,16 @@ key = 123 secSub := cfg.Section("foo.bar.xxx") assert.Equal(t, "123", secSub.Key("key").String()) }) + t.Run("TrailingSlash", func(t *testing.T) { + cfg, _ := NewConfigProviderFromData(` +[foo] +key = E:\ +xxx = yyy +`) + sec := cfg.Section("foo") + assert.Equal(t, "E:\\", sec.Key("key").String()) + assert.Equal(t, "yyy", sec.Key("xxx").String()) + }) } func TestConfigProviderHelper(t *testing.T) {