Hi

Asan (address sanitizer) detects use of invalid
memory with vim-7.4.796 on Linux x86_64 when doing:

$ vim -u NONE -c 'au CursorHoldI ,~'

=================================================================
==31962== ERROR: AddressSanitizer: heap-buffer-overflow on address
0x6062000168ff at pc 0x55c7fa bp 0x7ffd361811c0 sp 0x7ffd361811b8
READ of size 1 at 0x6062000168ff thread T0
    #0 0x55c7f9 in do_autocmd_event /home/dope/sb/vim/src/fileio.c:8517:0
    #1 0x55c1f5 in do_autocmd /home/dope/sb/vim/src/fileio.c:8413:0
    #2 0x5051b7 in ex_autocmd /home/dope/sb/vim/src/ex_docmd.c:5440:0
    #3 0x4f7e92 in do_one_cmd /home/dope/sb/vim/src/ex_docmd.c:2940:0
    #4 0x4eec56 in do_cmdline /home/dope/sb/vim/src/ex_docmd.c:1133:0
    #5 0x4ea664 in do_source /home/dope/sb/vim/src/ex_cmds2.c:3353:0
    #6 0x4e9302 in cmd_source /home/dope/sb/vim/src/ex_cmds2.c:2962:0
    #7 0x4e914e in ex_source /home/dope/sb/vim/src/ex_cmds2.c:2935:0
    #8 0x4f7e92 in do_one_cmd /home/dope/sb/vim/src/ex_docmd.c:2940:0
    #9 0x4eec56 in do_cmdline /home/dope/sb/vim/src/ex_docmd.c:1133:0
    #10 0x4edc1b in do_cmdline_cmd /home/dope/sb/vim/src/ex_docmd.c:738:0
    #11 0x85084f in exe_commands /home/dope/sb/vim/src/main.c:2926:0
    #12 0x84a9f9 in main /home/dope/sb/vim/src/main.c:961:0
    #13 0x7f6a473e6ec4 in __libc_start_main
/build/buildd/eglibc-2.19/csu/libc-start.c:287:0
    #14 0x405a28 in _start ??:0:0
0x6062000168ff is located 1 bytes to the left of 4096-byte region
[0x606200016900,0x606200017900)
allocated by thread T0 here:
    #0 0x7f6a48ec341a in malloc ??:0:0
    #1 0x605a4f in lalloc /home/dope/sb/vim/src/misc2.c:921:0
    #2 0x605859 in alloc /home/dope/sb/vim/src/misc2.c:820:0
    #3 0x5e73e1 in expand_env_save_opt /home/dope/sb/vim/src/misc1.c:3926:0
    #4 0x5e73c6 in expand_env_save /home/dope/sb/vim/src/misc1.c:3912:0
    #5 0x55bf0a in do_autocmd /home/dope/sb/vim/src/fileio.c:8358:0
    #6 0x5051b7 in ex_autocmd /home/dope/sb/vim/src/ex_docmd.c:5440:0
    #7 0x4f7e92 in do_one_cmd /home/dope/sb/vim/src/ex_docmd.c:2940:0
    #8 0x4eec56 in do_cmdline /home/dope/sb/vim/src/ex_docmd.c:1133:0
    #9 0x4ea664 in do_source /home/dope/sb/vim/src/ex_cmds2.c:3353:0
    #10 0x4e9302 in cmd_source /home/dope/sb/vim/src/ex_cmds2.c:2962:0
    #11 0x4e914e in ex_source /home/dope/sb/vim/src/ex_cmds2.c:2935:0
    #12 0x4f7e92 in do_one_cmd /home/dope/sb/vim/src/ex_docmd.c:2940:0
    #13 0x4eec56 in do_cmdline /home/dope/sb/vim/src/ex_docmd.c:1133:0
    #14 0x4edc1b in do_cmdline_cmd /home/dope/sb/vim/src/ex_docmd.c:738:0
    #15 0x85084f in exe_commands /home/dope/sb/vim/src/main.c:2926:0
    #16 0x84a9f9 in main /home/dope/sb/vim/src/main.c:961:0
    #17 0x7f6a473e6ec4 in __libc_start_main
/build/buildd/eglibc-2.19/csu/libc-start.c:287:0
Shadow bytes around the buggy address:
  0x0c0cbfffacc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0cbfffacd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0cbffface0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0cbfffacf0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0cbfffad00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c0cbfffad10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa[fa]
  0x0c0cbfffad20:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c0cbfffad30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c0cbfffad40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c0cbfffad50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c0cbfffad60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:     fa
  Heap righ redzone:     fb
  Freed Heap region:     fd
  Stack left redzone:    f1
  Stack mid redzone:     f2
  Stack right redzone:   f3
  Stack partial redzone: f4
  Stack after return:    f5
  Stack use after scope: f8
  Global redzone:        f9
  Global init order:     f6
  Poisoned by user:      f7
  ASan internal:         fe
==31962== ABORTING

Attached patch fixes it.
Bug was found using afl-fuzz + asan.

Regards
Dominique

-- 
-- 
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.
diff -r 8840c1ae3b50 src/fileio.c
--- a/src/fileio.c	Wed Jul 22 22:46:14 2015 +0200
+++ b/src/fileio.c	Sun Jul 26 06:34:09 2015 +0200
@@ -8514,7 +8514,7 @@
 	 */
 	brace_level = 0;
 	for (endpat = pat; *endpat && (*endpat != ',' || brace_level
-					     || endpat[-1] == '\\'); ++endpat)
+		     || (pat != endpat && endpat[-1] == '\\')); ++endpat)
 	{
 	    if (*endpat == '{')
 		brace_level++;

Raspunde prin e-mail lui