--- a/vendor/gopkg.in/ini.v1/parser.go Tue Aug 23 22:33:28 2022 +0200
+++ b/vendor/gopkg.in/ini.v1/parser.go Tue Aug 23 22:39:43 2022 +0200
@@ -131,7 +131,7 @@
// Check if key name surrounded by quotes.
var keyQuote string
if line[0] == '"' {
- if len(line) > 6 && string(line[0:3]) == `"""` {
+ if len(line) > 6 && line[0:3] == `"""` {
keyQuote = `"""`
} else {
keyQuote = `"`
@@ -164,6 +164,10 @@
if endIdx < 0 {
return "", -1, ErrDelimiterNotFound{line}
}
+ if endIdx == 0 {
+ return "", -1, ErrEmptyKeyName{line}
+ }
+
return strings.TrimSpace(line[0:endIdx]), endIdx + 1, nil
}
@@ -232,7 +236,7 @@
}
var valQuote string
- if len(line) > 3 && string(line[0:3]) == `"""` {
+ if len(line) > 3 && line[0:3] == `"""` {
valQuote = `"""`
} else if line[0] == '`' {
valQuote = "`"
@@ -289,12 +293,8 @@
hasSurroundedQuote(line, '"')) && !p.options.PreserveSurroundedQuote {
line = line[1 : len(line)-1]
} else if len(valQuote) == 0 && p.options.UnescapeValueCommentSymbols {
- if strings.Contains(line, `\;`) {
- line = strings.Replace(line, `\;`, ";", -1)
- }
- if strings.Contains(line, `\#`) {
- line = strings.Replace(line, `\#`, "#", -1)
- }
+ line = strings.ReplaceAll(line, `\;`, ";")
+ line = strings.ReplaceAll(line, `\#`, "#")
} else if p.options.AllowPythonMultilineValues && lastChar == '\n' {
return p.readPythonMultilines(line, bufferSize)
}
@@ -306,15 +306,9 @@
parserBufferPeekResult, _ := p.buf.Peek(bufferSize)
peekBuffer := bytes.NewBuffer(parserBufferPeekResult)
- indentSize := 0
for {
peekData, peekErr := peekBuffer.ReadBytes('\n')
- if peekErr != nil {
- if peekErr == io.EOF {
- p.debug("readPythonMultilines: io.EOF, peekData: %q, line: %q", string(peekData), line)
- return line, nil
- }
-
+ if peekErr != nil && peekErr != io.EOF {
p.debug("readPythonMultilines: failed to peek with error: %v", peekErr)
return "", peekErr
}
@@ -333,19 +327,6 @@
return line, nil
}
- // Determine indent size and line prefix.
- currentIndentSize := len(peekMatches[1])
- if indentSize < 1 {
- indentSize = currentIndentSize
- p.debug("readPythonMultilines: indent size is %d", indentSize)
- }
-
- // Make sure each line is indented at least as far as first line.
- if currentIndentSize < indentSize {
- p.debug("readPythonMultilines: end of value, current indent: %d, expected indent: %d, line: %q", currentIndentSize, indentSize, line)
- return line, nil
- }
-
// Advance the parser reader (buffer) in-sync with the peek buffer.
_, err := p.buf.Discard(len(peekData))
if err != nil {
@@ -353,8 +334,7 @@
return "", err
}
- // Handle indented empty line.
- line += "\n" + peekMatches[1][indentSize:] + peekMatches[2]
+ line += "\n" + peekMatches[0]
}
}
@@ -465,6 +445,8 @@
// Reset auto-counter and comments
p.comment.Reset()
p.count = 1
+ // Nested values can't span sections
+ isLastValueEmpty = false
inUnparseableSection = false
for i := range f.options.UnparseableSections {
@@ -485,8 +467,9 @@
kname, offset, err := readKeyName(f.options.KeyValueDelimiters, line)
if err != nil {
+ switch {
// Treat as boolean key when desired, and whole line is key name.
- if IsErrDelimiterNotFound(err) {
+ case IsErrDelimiterNotFound(err):
switch {
case f.options.AllowBooleanKeys:
kname, err := p.readValue(line, parserBufferSize)
@@ -504,6 +487,8 @@
case f.options.SkipUnrecognizableLines:
continue
}
+ case IsErrEmptyKeyName(err) && f.options.SkipUnrecognizableLines:
+ continue
}
return err
}