]> source.dussan.org Git - gitea.git/commitdiff
Fix INI parsing for value with trailing slash (#26995) (#27001)
authorGiteabot <teabot@gitea.io>
Sun, 10 Sep 2023 18:52:25 +0000 (02:52 +0800)
committerGitHub <noreply@github.com>
Sun, 10 Sep 2023 18:52:25 +0000 (20:52 +0200)
Backport #26995 by @wxiaoguang

Fix #26977 (a temp fix)

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
modules/setting/config_provider.go
modules/setting/config_provider_test.go

index d00164df9e0d28286e50a08c25a664963d2059f8..8d64286288df7fc22992854d075927154ed9a5c9 100644 (file)
@@ -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)
index 7e7c6be2bb839ebadf1bd55e69817389ec34a49d..a666d124c777eabaf7292e8024501799b9ded08a 100644 (file)
@@ -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) {