Dominique wrote:

> afl-fuzz (American Fuzzy Lop) found this case
> which causes Vim-7.4.1558 to segfault:
> 
> $ cat crash.vim
> let s:v= {}
> let s:x = {"a": s:v}
> let s:v["b"] = s:x
> let s:w = {"c": s:x,"d": ''}
> call assert_equal(s:w, '')
> 
> $ vim -u NONE -N -S crash.vim
> Vim: Caught deadly signal SEGV
> Press ENTER or type command to continueVim: Finished.
> Segmentation fault (core dumped)
> 
> Valgrind reports:
> 
> ==3644== Memcheck, a memory error detector
> ==3644== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
> ==3644== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
> ==3644== Command: ./vim -u NONE -N -S crash.vim
> ==3644==
> ==3644== Invalid read of size 1
> ==3644==    at 0x8083A6F: ga_concat_esc (eval.c:9165)
> ==3644==    by 0x8083B37: fill_assert_error (eval.c:9211)
> ==3644==    by 0x8083C70: f_assert_equal (eval.c:9247)
> ==3644==    by 0x80830C6: call_func (eval.c:8798)
> ==3644==    by 0x8082B9A: get_func_tv (eval.c:8597)
> ==3644==    by 0x807B6CB: ex_call (eval.c:3526)
> ==3644==    by 0x80B78EB: do_one_cmd (ex_docmd.c:2921)
> ==3644==    by 0x80B4BF7: do_cmdline (ex_docmd.c:1107)
> ==3644==    by 0x80B2B42: do_source (ex_cmds2.c:3727)
> ==3644==    by 0x80B223A: cmd_source (ex_cmds2.c:3340)
> ==3644==    by 0x80B2198: ex_source (ex_cmds2.c:3315)
> ==3644==    by 0x80B78EB: do_one_cmd (ex_docmd.c:2921)
> ==3644==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
> ==3644==
> 
>  9159     static void
>  9160 ga_concat_esc(garray_T *gap, char_u *str)
>  9161 {
>  9162     char_u  *p;
>  9163     char_u  buf[NUMBUFLEN];
>  9164
>  9165     for (p = str; *p != NUL; ++p)
>  9166         switch (*p)
>  9167         {
> 
>  9190     static void
>  9191 fill_assert_error(
>  ....
>  9211             ga_concat_esc(gap, tv2string(exp_tv, &tofree, numbuf, 0));
> 
> ga_concat_esc(...) is called with str being NULL
> (returned value of tv2string at line 9211) which causes
> the segfault at line 9165.
> 
> Attached patch fixes the crash, but I'm not sure
> whether it's the best way to fix it.

Thanks.  I suppose that is the right way to fix it.  But I'll add the
"NULL" to the message, otherwise it doesn't look right.

I'll also add a test for this.

-- 
It was recently discovered that research causes cancer in rats.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui