summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mailru/easyjson/jlexer/lexer.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mailru/easyjson/jlexer/lexer.go')
-rw-r--r--vendor/github.com/mailru/easyjson/jlexer/lexer.go13
1 files changed, 9 insertions, 4 deletions
diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go
index 90525e665..51f056615 100644
--- a/vendor/github.com/mailru/easyjson/jlexer/lexer.go
+++ b/vendor/github.com/mailru/easyjson/jlexer/lexer.go
@@ -240,7 +240,7 @@ func (r *Lexer) fetchNumber() {
// findStringLen tries to scan into the string literal for ending quote char to determine required size.
// The size will be exact if no escapes are present and may be inexact if there are escaped chars.
-func findStringLen(data []byte) (hasEscapes bool, length int) {
+func findStringLen(data []byte) (isValid, hasEscapes bool, length int) {
delta := 0
for i := 0; i < len(data); i++ {
@@ -252,11 +252,11 @@ func findStringLen(data []byte) (hasEscapes bool, length int) {
delta++
}
case '"':
- return (delta > 0), (i - delta)
+ return true, (delta > 0), (i - delta)
}
}
- return false, len(data)
+ return false, false, len(data)
}
// getu4 decodes \uXXXX from the beginning of s, returning the hex value,
@@ -342,7 +342,12 @@ func (r *Lexer) fetchString() {
r.pos++
data := r.Data[r.pos:]
- hasEscapes, length := findStringLen(data)
+ isValid, hasEscapes, length := findStringLen(data)
+ if !isValid {
+ r.pos += length
+ r.errParse("unterminated string literal")
+ return
+ }
if !hasEscapes {
r.token.byteValue = data[:length]
r.pos += length + 1