vim-patch:7.4.1567

Problem:    Crash in assert_fails().
Solution:   Check for NULL. (Dominique Pelle)  Add a test.

1abb502635
This commit is contained in:
James McCoy 2016-05-25 17:13:23 -04:00
parent bc306ab5aa
commit ccef5c9c77
3 changed files with 21 additions and 2 deletions

View File

@ -7688,7 +7688,8 @@ static void f_assert_fails(typval_T *argvars, typval_T *rettv)
char_u buf[NUMBUFLEN]; char_u buf[NUMBUFLEN];
char *error = (char *)get_tv_string_buf_chk(&argvars[1], buf); char *error = (char *)get_tv_string_buf_chk(&argvars[1], buf);
if (strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL) { if (error == NULL
|| strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL) {
prepare_assert_error(&ga); prepare_assert_error(&ga);
fill_assert_error(&ga, &argvars[2], NULL, &argvars[1], fill_assert_error(&ga, &argvars[2], NULL, &argvars[1],
&vimvars[VV_ERRMSG].vv_tv); &vimvars[VV_ERRMSG].vv_tv);

View File

@ -119,7 +119,7 @@ static int included_patches[] = {
1570, 1570,
1569, 1569,
1568, 1568,
// 1567, 1567,
// 1566 NA // 1566 NA
// 1565, // 1565,
// 1564, // 1564,

View File

@ -142,4 +142,22 @@ describe('assert function:', function()
}) })
end) end)
end) end)
-- assert_fails({cmd}, [, {error}])
describe('assert_fails', function()
it('should change v:errors when error does not match v:errmsg', function()
execute([[call assert_fails('xxx', {})]])
expected_errors({"Expected {} but got 'E731: using Dictionary as a String'"})
end)
it('should not change v:errors when cmd errors', function()
call('assert_fails', 'NonexistentCmd')
expected_empty()
end)
it('should change v:errors when cmd succeeds', function()
call('assert_fails', 'call empty("")')
expected_errors({'command did not fail: call empty("")'})
end)
end)
end) end)