# HG changeset patch # User Bram Moolenaar # Date 1550928611 -3600 # Node ID e5f82e8b3c0680bc9328b1081d1d2cf1badd09aa # Parent 16d17da85f670c811618a0e545a387da97d7a2c6 patch 8.1.0977: blob not tested with Ruby commit https://github.com/vim/vim/commit/0d13cce3453b2274c93c5015faa1993baaebace9 Author: Bram Moolenaar Date: Sat Feb 23 14:23:03 2019 +0100 patch 8.1.0977: blob not tested with Ruby Problem: Blob not tested with Ruby. Solution: Add more test coverage. fixes a crash. (Dominique Pelle, closes #4036) diff --git a/src/if_ruby.c b/src/if_ruby.c --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -1267,7 +1267,7 @@ static VALUE vim_blob(VALUE self UNUSED, int i; for (i = 0; i < RSTRING_LEN(str); i++) { - sprintf(buf, "%02X", RSTRING_PTR(str)[i]); + sprintf(buf, "%02X", (unsigned char)(RSTRING_PTR(str)[i])); rb_str_concat(result, rb_str_new2(buf)); } return result; diff --git a/src/testdir/test_ruby.vim b/src/testdir/test_ruby.vim --- a/src/testdir/test_ruby.vim +++ b/src/testdir/test_ruby.vim @@ -306,6 +306,9 @@ func Test_Vim_evaluate() call assert_equal('foo', RubyEval('Vim::evaluate("\"foo\"")')) call assert_equal('String', RubyEval('Vim::evaluate("\"foo\"").class')) + call assert_equal('["\x01\xAB"]', RubyEval('Vim::evaluate("0z01ab").unpack("M")')) + call assert_equal('String', RubyEval('Vim::evaluate("0z01ab").class')) + call assert_equal('[1, 2]', RubyEval('Vim::evaluate("[1, 2]")')) call assert_equal('Array', RubyEval('Vim::evaluate("[1, 2]").class')) @@ -324,6 +327,13 @@ func Test_Vim_evaluate() call assert_equal('FalseClass',RubyEval('Vim::evaluate("v:false").class')) endfunc +func Test_Vim_blob() + call assert_equal('0z', RubyEval('Vim::blob("")')) + call assert_equal('0z31326162', RubyEval('Vim::blob("12ab")')) + call assert_equal('0z00010203', RubyEval('Vim::blob("\x00\x01\x02\x03")')) + call assert_equal('0z8081FEFF', RubyEval('Vim::blob("\x80\x81\xfe\xff")')) +endfunc + func Test_Vim_evaluate_list() call setline(line('$'), ['2 line 2']) ruby Vim.command("normal /^2\n") diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -780,6 +780,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 977, +/**/ 976, /**/ 975,