Skip to content

Commit c3287f4

Browse files
authored
Merge pull request z7zmey#125 from z7zmey/issue-98
[z7zmey#98] fix panic when heredoc is not closed
2 parents 15e7237 + e1686cb commit c3287f4

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

internal/scanner/lexer.go

+4
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ func (lex *Lexer) isHeredocEndSince73(p int) bool {
140140
return false
141141
}
142142

143+
if p == len(lex.data) {
144+
return false
145+
}
146+
143147
for lex.data[p] == ' ' || lex.data[p] == '\t' {
144148
p++
145149
}

internal/scanner/scanner_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,34 @@ CAT;`
10911091
assert.DeepEqual(t, expected, actual)
10921092
}
10931093

1094+
func TestHereDocUnclosed(t *testing.T) {
1095+
src := "<?<<<'S'\n"
1096+
1097+
expected := []string{
1098+
token.T_START_HEREDOC.String(),
1099+
}
1100+
1101+
config := cfg.Config{
1102+
Version: &version.Version{
1103+
Major: 7,
1104+
Minor: 4,
1105+
},
1106+
}
1107+
lexer := NewLexer([]byte(src), config)
1108+
actual := []string{}
1109+
1110+
for {
1111+
tkn := lexer.Lex()
1112+
if tkn.ID == 0 {
1113+
break
1114+
}
1115+
1116+
actual = append(actual, tkn.ID.String())
1117+
}
1118+
1119+
assert.DeepEqual(t, expected, actual)
1120+
}
1121+
10941122
func TestInlineHtmlNopTokens(t *testing.T) {
10951123
src := `<?php
10961124
$a; ?> test <?php

0 commit comments

Comments
 (0)