Skip to content

Commit 0df5b7d

Browse files
committed
Fail with invalid . in blob literal
1 parent b7d0a17 commit 0df5b7d

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

autoload/vimlparser.vim

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2583,7 +2583,7 @@ function! s:ExprTokenizer.get2()
25832583
let s .= r.read_bdigit()
25842584
return self.token(s:TOKEN_NUMBER, s, pos)
25852585
elseif c ==# '0' && (r.p(1) ==# 'Z' || r.p(1) ==# 'z') && r.p(2) !=# '.'
2586-
let s = r.getn(3)
2586+
let s = r.getn(2)
25872587
let s .= r.read_blob()
25882588
return self.token(s:TOKEN_BLOB, s, pos)
25892589
elseif s:isdigit(c)
@@ -3954,11 +3954,16 @@ endfunction
39543954
function! s:StringReader.read_blob()
39553955
let r = ''
39563956
while 1
3957-
let c = self.peekn(1)
3958-
if !s:isxdigit(c) && c != '.'
3957+
let s = self.peekn(2)
3958+
if s == ''
39593959
break
3960+
elseif s =~# '^[0-9A-Fa-f][0-9A-Fa-f]$'
3961+
let r .= self.getn(2)
3962+
elseif s =~# '^\.[0-9A-Fa-f]$'
3963+
let r .= self.getn(1)
3964+
else
3965+
throw s:Err('E973: Blob literal should have an even number of hex characters:' . s, self.getpos())
39603966
endif
3961-
let r .= self.getn(1)
39623967
endwhile
39633968
return r
39643969
endfunction

0 commit comments

Comments
 (0)