mirror of
https://github.com/go-ini/ini.git
synced 2026-06-19 21:46:45 +02:00
Fix parsing of double-quoted values with backslash continuations (#373)
Co-authored-by: ᴊᴏᴇ ᴄʜᴇɴ <jc@unknwon.io>
This commit is contained in:
co-authored by
ᴊᴏᴇ ᴄʜᴇɴ
parent
54a0ff78ec
commit
5a14e1849d
+25
@@ -567,6 +567,31 @@ key = test value <span style="color: %s\; background: %s">more text</span>
|
||||
assert.Equal(t, `test value <span style="color: %s; background: %s">more text</span>`, f.Section("").Key("key").String())
|
||||
})
|
||||
|
||||
t.Run("unescape double quotes with backslash continuation", func(t *testing.T) {
|
||||
f, err := LoadSources(LoadOptions{
|
||||
UnescapeValueDoubleQuotes: true,
|
||||
}, []byte(`hello = "!f() { \
|
||||
echo "hello world"; \
|
||||
};f"`))
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, f)
|
||||
|
||||
expected := `!f() { \
|
||||
echo "hello world"; \
|
||||
};f`
|
||||
assert.Equal(t, expected, f.Section("").Key("hello").String())
|
||||
|
||||
t.Run("inverse case", func(t *testing.T) {
|
||||
_, err := LoadSources(LoadOptions{
|
||||
UnescapeValueDoubleQuotes: true,
|
||||
IgnoreContinuation: true,
|
||||
}, []byte(`hello = "!f() { \
|
||||
echo "hello world"; \
|
||||
};f"`))
|
||||
require.Error(t, err)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("can parse small python-compatible INI files", func(t *testing.T) {
|
||||
f, err := LoadSources(LoadOptions{
|
||||
AllowPythonMultilineValues: true,
|
||||
|
||||
@@ -182,6 +182,13 @@ func (p *parser) readMultilines(line, val, valQuote string) (string, error) {
|
||||
|
||||
pos := strings.LastIndex(next, valQuote)
|
||||
if pos > -1 {
|
||||
// Check if the line ends with backslash continuation after the quote
|
||||
restOfLine := strings.TrimRight(next[pos+len(valQuote):], "\r\n")
|
||||
if !p.options.IgnoreContinuation && strings.HasSuffix(strings.TrimSpace(restOfLine), `\`) {
|
||||
val += next
|
||||
continue
|
||||
}
|
||||
|
||||
val += next[:pos]
|
||||
|
||||
comment, has := cleanComment([]byte(next[pos:]))
|
||||
|
||||
Reference in New Issue
Block a user