Skip to content

Commit 2fe3344

Browse files
authored
scanner more safe whitespace skip (#8499)
1 parent b4fda6b commit 2fe3344

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

go/cmd/dolt/commands/sql_statement_scanner.go

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,8 @@ func (s *streamScanner) Scan() bool {
9696
}
9797

9898
// discard leading whitespace
99-
for {
100-
if s.i >= s.fill {
101-
if err := s.read(); err != nil {
102-
s.err = err
103-
return false
104-
}
105-
}
106-
if !unicode.IsSpace(rune(s.buf[s.i])) {
107-
break
108-
}
109-
if s.buf[s.i] == '\n' {
110-
s.lineNum++
111-
}
112-
s.i++
99+
if !s.skipWhitespace() {
100+
return false
113101
}
114102
s.truncate()
115103

@@ -143,6 +131,28 @@ func (s *streamScanner) Scan() bool {
143131
}
144132
}
145133

134+
func (s *streamScanner) skipWhitespace() bool {
135+
for {
136+
if s.i >= s.fill {
137+
if err := s.read(); err != nil {
138+
s.err = err
139+
return false
140+
}
141+
}
142+
if s.isEOF {
143+
return true
144+
}
145+
if !unicode.IsSpace(rune(s.buf[s.i])) {
146+
break
147+
}
148+
if s.buf[s.i] == '\n' {
149+
s.lineNum++
150+
}
151+
s.i++
152+
}
153+
return true
154+
}
155+
146156
func (s *streamScanner) truncate() {
147157
// copy size should be 4k or less
148158
s.state.start = s.i
@@ -213,13 +223,8 @@ func (s *streamScanner) isDelimiterExpr() (error, bool) {
213223
if s.fill-s.i >= delimPrefixLen && bytes.EqualFold(s.buf[s.i:s.i+delimPrefixLen], delimPrefix) {
214224
delimTokenIdx := s.i
215225
s.i += delimPrefixLen
216-
for ; !s.isEOF && unicode.IsSpace(rune(s.buf[s.i])); s.i++ {
217-
if s.i >= s.fill {
218-
if err := s.read(); err != nil {
219-
s.err = err
220-
return err, false
221-
}
222-
}
226+
if !s.skipWhitespace() {
227+
return nil, false
223228
}
224229
if s.isEOF {
225230
// invalid delimiter

go/cmd/dolt/commands/sql_statement_scanner_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,15 @@ insert into foo values (1,2,3)|`,
195195
},
196196
lineNums: []int{1, 2},
197197
},
198+
{
199+
input: "DELIMITER" + strings.Repeat(" ", 4096) + `|
200+
insert into foo values (1,2,3)|`,
201+
statements: []string{
202+
"",
203+
"insert into foo values (1,2,3)",
204+
},
205+
lineNums: []int{1, 2},
206+
},
198207
}
199208

200209
for _, tt := range testcases {

0 commit comments

Comments
 (0)