summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-02-23 14:23:03 +0100
committerBram Moolenaar <Bram@vim.org>2019-02-23 14:23:03 +0100
commit0d13cce3453b2274c93c5015faa1993baaebace9 (patch)
tree5cf62aee4d8867db3bbba63795c3829aae1055f9
parente4963c543ddcfc4845fa0d42893b6a4e1aa27c47 (diff)
downloadvim-git-0d13cce3453b2274c93c5015faa1993baaebace9.tar.gz
patch 8.1.0977: blob not tested with Rubyv8.1.0977
Problem: Blob not tested with Ruby. Solution: Add more test coverage. fixes a crash. (Dominique Pelle, closes #4036)
-rw-r--r--src/if_ruby.c2
-rw-r--r--src/testdir/test_ruby.vim10
-rw-r--r--src/version.c2
3 files changed, 13 insertions, 1 deletions
diff --git a/src/if_ruby.c b/src/if_ruby.c
index d3ed78128..543ee8ac2 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -1267,7 +1267,7 @@ static VALUE vim_blob(VALUE self UNUSED, VALUE str)
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
index 5476e5171..fe2afa625 100644
--- 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
index b7479254d..8d22ca90e 100644
--- 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,