diff options
| -rw-r--r-- | runtime/autoload/msgpack.vim | 8 | ||||
| -rw-r--r-- | test/functional/plugin/msgpack_spec.lua | 2 | 
2 files changed, 8 insertions, 2 deletions
| diff --git a/runtime/autoload/msgpack.vim b/runtime/autoload/msgpack.vim index 2e2697c57f..a10ac32469 100644 --- a/runtime/autoload/msgpack.vim +++ b/runtime/autoload/msgpack.vim @@ -665,11 +665,15 @@ function msgpack#eval(s, special_objs) abort        call add(expr, ']}')        let s = s[1:]      elseif s[0] is# '''' -      let char = matchstr(s, '\m\C^''\zs.\ze''') +      let char = matchstr(s, '\v\C^\''\zs%(\\\d+|.)\ze\''')        if empty(char)          throw 'char-invalid:Invalid integer character literal format: ' . s        endif -      call add(expr, char2nr(char)) +      if char[0] is# '\' +        call add(expr, +char[1:]) +      else +        call add(expr, char2nr(char)) +      endif        let s = s[len(char) + 2:]      else        throw 'unknown:Invalid non-space character: ' . s diff --git a/test/functional/plugin/msgpack_spec.lua b/test/functional/plugin/msgpack_spec.lua index c8da8e8f6c..5ba19708cf 100644 --- a/test/functional/plugin/msgpack_spec.lua +++ b/test/functional/plugin/msgpack_spec.lua @@ -652,6 +652,8 @@ describe('In autoload/msgpack.vim', function()        eval_eq('integer', ('a'):byte(), '\'a\'')        eval_eq('integer', 0xAB, '\'«\'') +      eval_eq('integer', 0, '\'\\0\'') +      eval_eq('integer', 10246567, '\'\\10246567\'')      end)      it('correctly loads constants', function() | 
