Skip to content

Commit

Permalink
Fix python multiline EOF error
Browse files Browse the repository at this point in the history
  • Loading branch information
gandarez committed Dec 1, 2021
1 parent e641746 commit acf928e
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 8 deletions.
23 changes: 23 additions & 0 deletions ini_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1562,3 +1562,26 @@ func TestPythonMultiline(t *testing.T) {
testData.Value3,
)
}

func TestPythonMultiline_EOF(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("Skipping testing on Windows")
}

path := filepath.Join("testdata", "multiline_eof.ini")
f, err := LoadSources(LoadOptions{
AllowPythonMultilineValues: true,
ReaderBufferSize: 64 * 1024,
}, path)
require.NoError(t, err)
require.NotNil(t, f)
assert.Len(t, f.Sections(), 1)

defaultSection := f.Section("")
assert.NotNil(t, f.Section(""))

var testData testData
err = defaultSection.MapTo(&testData)
require.NoError(t, err)
assert.Equal(t, "some text here\n\tsome more text here 2", testData.Value1)
}
9 changes: 1 addition & 8 deletions parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,6 @@ func hasSurroundedQuote(in string, quote byte) bool {
}

func (p *parser) readValue(in []byte, bufferSize int) (string, error) {

line := strings.TrimLeftFunc(string(in), unicode.IsSpace)
if len(line) == 0 {
if p.options.AllowPythonMultilineValues && len(in) > 0 && in[len(in)-1] == '\n' {
Expand Down Expand Up @@ -304,12 +303,7 @@ func (p *parser) readPythonMultilines(line string, bufferSize int) (string, erro

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
}
Expand Down Expand Up @@ -481,7 +475,6 @@ func (f *File) parse(reader io.Reader) (err error) {
key.Comment = strings.TrimSpace(p.comment.String())
p.comment.Reset()
continue

case f.options.SkipUnrecognizableLines:
continue
}
Expand Down
2 changes: 2 additions & 0 deletions testdata/multiline_eof.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
value1 = some text here
some more text here 2

0 comments on commit acf928e

Please sign in to comment.