Skip to content

Commit

Permalink
fixes #144, using bytes.Buffer for more efficient string building
Browse files Browse the repository at this point in the history
  • Loading branch information
qz committed Mar 5, 2018
1 parent b0297d8 commit 3f7e07a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
8 changes: 4 additions & 4 deletions pdf/core/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 +152,21 @@ func (parser *PdfParser) readComment() (string, error) {

// Read a single line of text from current position.
func (parser *PdfParser) readTextLine() (string, error) {
lineStr := ""
var r bytes.Buffer
for {
bb, err := parser.reader.Peek(1)
if err != nil {
common.Log.Debug("Error %s", err.Error())
return lineStr, err
return r.String(), err
}
if (bb[0] != '\r') && (bb[0] != '\n') {
b, _ := parser.reader.ReadByte()
lineStr += string(b)
r.WriteByte(b)
} else {
break
}
}
return lineStr, nil
return r.String(), nil
}

// Parse a name starting with '/'.
Expand Down
15 changes: 15 additions & 0 deletions pdf/core/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,21 @@ func TestStringParsing(t *testing.T) {
}
}

func TestReadTextLine(t *testing.T) {
// reading text ling + rewinding should be idempotent, that is:
// if we rewind back len(str) bytes after reading string str we should arrive at beginning of str
rawText := "abc\xb0cde"
parser := PdfParser{}
parser.rs, parser.reader, parser.fileSize = makeReaderForText(rawText)
s, err := parser.readTextLine()
if err != nil && err != io.EOF {
t.Errorf("Unable to parse string, error: %s", err)
}
if parser.GetFileOffset() != int64(len(s)) {
t.Errorf("File offset after reading string of length %d is %d", len(s), parser.GetFileOffset())
}
}

func TestBinStringParsing(t *testing.T) {
// From an example O entry in Encrypt dictionary.
rawText1 := "(\xE6\x00\xEC\xC2\x02\x88\xAD\x8B\\r\x64\xA9" +
Expand Down

0 comments on commit 3f7e07a

Please sign in to comment.