Skip to content

Commit f40e974

Browse files
authored
Merge pull request #240 from octo/scanner-next
scanner: Update prevPos even when returning utf8.RuneError.
2 parents adef769 + fdaaf22 commit f40e974

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

hcl/scanner/scanner.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,18 @@ func (s *Scanner) next() rune {
7474
return eof
7575
}
7676

77-
if ch == utf8.RuneError && size == 1 {
78-
s.srcPos.Column++
79-
s.srcPos.Offset += size
80-
s.lastCharLen = size
81-
s.err("illegal UTF-8 encoding")
82-
return ch
83-
}
84-
8577
// remember last position
8678
s.prevPos = s.srcPos
8779

8880
s.srcPos.Column++
8981
s.lastCharLen = size
9082
s.srcPos.Offset += size
9183

84+
if ch == utf8.RuneError && size == 1 {
85+
s.err("illegal UTF-8 encoding")
86+
return ch
87+
}
88+
9289
if ch == '\n' {
9390
s.srcPos.Line++
9491
s.lastLineLen = s.srcPos.Column

hcl/scanner/scanner_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,3 +592,22 @@ func countNewlines(s string) int {
592592
}
593593
return n
594594
}
595+
596+
func TestScanHeredocRegexpCompile(t *testing.T) {
597+
cases := []string{
598+
"0\xe1\n<<ȸ\nhello\nworld\nȸ",
599+
}
600+
601+
for _, c := range cases {
602+
s := New([]byte(c))
603+
fmt.Printf("START %q\n", c)
604+
605+
for {
606+
tok := s.Scan()
607+
if tok.Type == token.EOF {
608+
break
609+
}
610+
t.Logf("s.Scan() = %s", tok)
611+
}
612+
}
613+
}

0 commit comments

Comments
 (0)