Skip to content

Commit 2931dc9

Browse files
committed
Fix parse blob literal
1 parent 13d67cc commit 2931dc9

File tree

5 files changed

+15
-13
lines changed

5 files changed

+15
-13
lines changed

autoload/vimlparser.vim

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3955,14 +3955,14 @@ function! s:StringReader.read_blob()
39553955
let r = ''
39563956
while 1
39573957
let s = self.peekn(2)
3958-
if s == ''
3959-
break
3960-
elseif s =~# '^[0-9A-Fa-f][0-9A-Fa-f]$'
3958+
if s =~# '^[0-9A-Fa-f][0-9A-Fa-f]$'
39613959
let r .= self.getn(2)
39623960
elseif s =~# '^\.[0-9A-Fa-f]$'
39633961
let r .= self.getn(1)
3964-
else
3962+
elseif s =~# '^[0-9A-Fa-f][^0-9A-Fa-f]$'
39653963
throw s:Err('E973: Blob literal should have an even number of hex characters:' . s, self.getpos())
3964+
else
3965+
break
39663966
endif
39673967
endwhile
39683968
return r

js/vimlparser.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3862,18 +3862,18 @@ StringReader.prototype.read_blob = function() {
38623862
var r = "";
38633863
while (1) {
38643864
var s = this.peekn(2);
3865-
if (s == "") {
3866-
break;
3867-
}
3868-
else if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
3865+
if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
38693866
r += this.getn(2);
38703867
}
38713868
else if (viml_eqregh(s, "^\\.[0-9A-Fa-f]$")) {
38723869
r += this.getn(1);
38733870
}
3874-
else {
3871+
else if (viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$")) {
38753872
throw Err("E973: Blob literal should have an even number of hex characters:" + s, this.getpos());
38763873
}
3874+
else {
3875+
break;
3876+
}
38773877
}
38783878
return r;
38793879
}

py/vimlparser.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3073,14 +3073,14 @@ def read_blob(self):
30733073
r = ""
30743074
while 1:
30753075
s = self.peekn(2)
3076-
if s == "":
3077-
break
3078-
elif viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$"):
3076+
if viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$"):
30793077
r += self.getn(2)
30803078
elif viml_eqregh(s, "^\\.[0-9A-Fa-f]$"):
30813079
r += self.getn(1)
3082-
else:
3080+
elif viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$"):
30833081
raise VimLParserException(Err("E973: Blob literal should have an even number of hex characters:" + s, self.getpos()))
3082+
else:
3083+
break
30843084
return r
30853085

30863086
def read_xdigit(self):

test/test_blob.ok

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
(echo 0zDEADBEEF)
66
(echo 0ZDEADBEEF)
77
(echo 0ZDEAD.BEEF)
8+
(echo (+ 0z00 0zFF))

test/test_blob.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ echo 0Zdeadbeef
55
echo 0zDEADBEEF
66
echo 0ZDEADBEEF
77
echo 0ZDEAD.BEEF
8+
echo 0z00 + 0zFF

0 commit comments

Comments
 (0)