Patch 9.0.1511
Problem: Crash when using wrong arg types to assert_match().
Solution: Check for NULL pointer. (closes #12349)
Files: src/testing.c, src/testdir/test_assert.vim
*** ../vim-9.0.1510/src/testing.c 2023-05-04 18:58:18.406209671 +0100
--- src/testing.c 2023-05-06 12:19:25.880160488 +0100
***************
*** 281,289 ****
garray_T ga;
char_u buf1[NUMBUFLEN];
char_u buf2[NUMBUFLEN];
- int called_emsg_before = called_emsg;
- char_u *pat;
- char_u *text;
if (in_vim9script()
&& (check_for_string_arg(argvars, 0) == FAIL
--- 281,286 ----
***************
*** 291,299 ****
|| check_for_opt_string_arg(argvars, 2) == FAIL))
return 1;
! pat = tv_get_string_buf_chk(&argvars[0], buf1);
! text = tv_get_string_buf_chk(&argvars[1], buf2);
! if (called_emsg == called_emsg_before
&& pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH))
{
prepare_assert_error(&ga);
--- 288,296 ----
|| check_for_opt_string_arg(argvars, 2) == FAIL))
return 1;
! char_u *pat = tv_get_string_buf_chk(&argvars[0], buf1);
! char_u *text = tv_get_string_buf_chk(&argvars[1], buf2);
! if (pat != NULL && text != NULL
&& pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH))
{
prepare_assert_error(&ga);
***************
*** 420,443 ****
{
char_u buf1[NUMBUFLEN];
char_u buf2[NUMBUFLEN];
- int called_emsg_before = called_emsg;
char_u *fname1 = tv_get_string_buf_chk(&argvars[0], buf1);
char_u *fname2 = tv_get_string_buf_chk(&argvars[1], buf2);
- garray_T ga;
FILE *fd1;
FILE *fd2;
char line1[200];
char line2[200];
int lineidx = 0;
! if (called_emsg > called_emsg_before)
return 0;
IObuff[0] = NUL;
fd1 = mch_fopen((char *)fname1, READBIN);
if (fd1 == NULL)
{
! vim_snprintf((char *)IObuff, IOSIZE, (char *)e_cant_read_file_str,
fname1);
}
else
{
--- 417,439 ----
{
char_u buf1[NUMBUFLEN];
char_u buf2[NUMBUFLEN];
char_u *fname1 = tv_get_string_buf_chk(&argvars[0], buf1);
char_u *fname2 = tv_get_string_buf_chk(&argvars[1], buf2);
FILE *fd1;
FILE *fd2;
char line1[200];
char line2[200];
int lineidx = 0;
! if (fname1 == NULL || fname2 == NULL)
return 0;
IObuff[0] = NUL;
fd1 = mch_fopen((char *)fname1, READBIN);
if (fd1 == NULL)
{
! vim_snprintf((char *)IObuff, IOSIZE, (char *)e_cant_read_file_str,
! fname1);
}
else
{
***************
*** 445,451 ****
if (fd2 == NULL)
{
fclose(fd1);
! vim_snprintf((char *)IObuff, IOSIZE, (char *)e_cant_read_file_str,
fname2);
}
else
{
--- 441,448 ----
if (fd2 == NULL)
{
fclose(fd1);
! vim_snprintf((char *)IObuff, IOSIZE, (char *)e_cant_read_file_str,
! fname2);
}
else
{
***************
*** 498,505 ****
--- 495,504 ----
fclose(fd2);
}
}
+
if (IObuff[0] != NUL)
{
+ garray_T ga;
prepare_assert_error(&ga);
if (argvars[2].v_type != VAR_UNKNOWN)
{
***************
*** 528,533 ****
--- 527,533 ----
ga_clear(&ga);
return 1;
}
+
return 0;
}
*** ../vim-9.0.1510/src/testdir/test_assert.vim 2023-05-04 18:58:18.410209481
+0100
--- src/testdir/test_assert.vim 2023-05-06 12:14:25.019915952 +0100
***************
*** 335,340 ****
--- 335,357 ----
call remove(v:errors, 0)
endfunc
+ func Test_assert_wrong_arg_emsg_off()
+ CheckFeature folding
+
+ new
+ call setline(1, ['foo', 'bar'])
+ 1,2fold
+
+ " This used to crash Vim
+ let &l:foldtext = 'assert_match({}, {})'
+ redraw!
+
+ let &l:foldtext = 'assert_equalfile({}, {})'
+ redraw!
+
+ bwipe!
+ endfunc
+
func Test_assert_fails_in_try_block()
try
call assert_equal(0, assert_fails('throw "error"'))
*** ../vim-9.0.1510/src/version.c 2023-05-05 22:58:30.805061562 +0100
--- src/version.c 2023-05-06 12:16:10.219998526 +0100
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1511,
/**/
--
The process for understanding customers primarily involves sitting around with
other marketing people and talking about what you would to if you were dumb
enough to be a customer.
(Scott Adams - The Dilbert principle)
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20230506112040.90A061C1B27%40moolenaar.net.