mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-19 17:24:26 +08:00
fix cannot import OFX file which has only one but very long line (#243)
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
"io"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -269,19 +270,27 @@ func readOFX1FileHeader(ctx core.Context, data []byte) (fileHeader *ofxFileHeade
|
|||||||
|
|
||||||
func readOFX2FileHeader(ctx core.Context, data []byte) (fileHeader *ofxFileHeader, err error) {
|
func readOFX2FileHeader(ctx core.Context, data []byte) (fileHeader *ofxFileHeader, err error) {
|
||||||
reader := bytes.NewReader(data)
|
reader := bytes.NewReader(data)
|
||||||
scanner := bufio.NewScanner(reader)
|
bufReader := bufio.NewReader(reader)
|
||||||
fileHeader = &ofxFileHeader{}
|
fileHeader = &ofxFileHeader{}
|
||||||
headerLine := ""
|
headerLine := ""
|
||||||
|
|
||||||
for scanner.Scan() {
|
for {
|
||||||
line := scanner.Text()
|
line, err := bufReader.ReadString('\n')
|
||||||
|
|
||||||
ofxHeaderStartIndex := strings.Index(line, "<?OFX ")
|
ofxHeaderStartIndex := strings.Index(line, "<?OFX ")
|
||||||
|
|
||||||
if ofxHeaderStartIndex >= 0 {
|
if ofxHeaderStartIndex >= 0 {
|
||||||
headerLine = ofx2HeaderPattern.FindString(line)
|
headerLine = ofx2HeaderPattern.FindString(line)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
log.Errorf(ctx, "[ofx_data_reader.readOFX2FileHeader] cannot read ofx 2.x file, because %s", err.Error())
|
||||||
|
return nil, errs.ErrInvalidOFXFile
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if headerLine == "" {
|
if headerLine == "" {
|
||||||
|
|||||||
Reference in New Issue
Block a user