Hi
Valgrind detects a bug in Vim-7.4.507 when doing:
$ valgrind vim -c ':setfiletype c' -c 'call feedkeys("i// foo\<CR>\<Esc>")'
=10911== Memcheck, a memory error detector
==10911== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==10911== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==10911== Command: ./vim -c :setfiletype\ c -c call\ feedkeys("i//\
foo\\\<CR\>\\\<Esc\>")
==10911==
==10911== Invalid read of size 1
==10911== at 0x4DA9B0: utf_ptr2char (mbyte.c:1705)
==10911== by 0x42EDDE: stop_insert (edit.c:6922)
==10911== by 0x42533A: edit (edit.c:8416)
==10911== by 0x4E7443: nv_edit (normal.c:9080)
==10911== by 0x4E08DE: normal_cmd (normal.c:1160)
==10911== by 0x5DAE42: main_loop (main.c:1342)
==10911== by 0x5DA3F7: main (main.c:1042)
==10911== Address 0xd0786b4 is 1 bytes after a block of size 3 alloc'd
==10911== at 0x4C2AB80: malloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==10911== by 0x4D0057: lalloc (misc2.c:921)
==10911== by 0x4C197B: del_bytes (misc1.c:2583)
==10911== by 0x42EDB6: stop_insert (edit.c:6914)
==10911== by 0x42533A: edit (edit.c:8416)
==10911== by 0x4E7443: nv_edit (normal.c:9080)
==10911== by 0x4E08DE: normal_cmd (normal.c:1160)
==10911== by 0x5DAE42: main_loop (main.c:1342)
==10911== by 0x5DA3F7: main (main.c:1042)
Doing a bisection, I see that the bug is introduced by this
recent patch which introduced line edit.c:6922 which is in
the above stack traces:
changeset: 6318:5e998fc610d5
tag: v7-4-492
user: Bram Moolenaar <[email protected]>
date: Fri Oct 31 19:20:36 2014 +0100
files: src/edit.c src/testdir/test4.in src/testdir/test4.ok src/version.c
description:
updated for version 7.4.492
Problem: In Insert mode, after inserting a newline that inserts a comment
leader, CTRL-O moves to the right. (ZyX) Issue 57.
Solution: Correct the condition for moving the cursor back to the NUL.
(Christian Brabandt)
ASan (address sanitizer) detects the same bug:
=================================================================
==13507== ERROR: AddressSanitizer: heap-buffer-overflow on address
0x60040007d274 at pc 0x620945 bp 0x7fff3f1c9a40 sp 0x7fff3f1c9a38
READ of size 1 at 0x60040007d274 thread T0
#0 0x620944 in utf_ptr2char /home/dope/sb/vim/src/mbyte.c:1705
#1 0x5ddee5 in gchar_pos /home/dope/sb/vim/src/misc1.c:2683
#2 0x450ed2 in stop_insert /home/dope/sb/vim/src/edit.c:6922
(discriminator 1)
#3 0x45592d in ins_esc /home/dope/sb/vim/src/edit.c:8416
#4 0x43e3ee in edit /home/dope/sb/vim/src/edit.c:988
#5 0x6528f6 in invoke_edit /home/dope/sb/vim/src/normal.c:9080
#6 0x652868 in nv_edit /home/dope/sb/vim/src/normal.c:9053
#7 0x62c92f in normal_cmd /home/dope/sb/vim/src/normal.c:1160
#8 0x843a2f in main_loop /home/dope/sb/vim/src/main.c:1342
#9 0x84301b in main /home/dope/sb/vim/src/main.c:1042
#10 0x7fecd052876c in __libc_start_main ??:?
#11 0x4072e8 in _start ??:?
0x60040007d274 is located 1 bytes to the right of 3-byte region
[0x60040007d270,0x60040007d273)
allocated by thread T0 here:
#0 0x7fecd2a4f56a in malloc ??:?
#1 0x5ff4d8 in lalloc /home/dope/sb/vim/src/misc2.c:921
#2 0x5ff2e2 in alloc /home/dope/sb/vim/src/misc2.c:820
#3 0x5dd859 in del_bytes /home/dope/sb/vim/src/misc1.c:2583
#4 0x5dd303 in del_chars /home/dope/sb/vim/src/misc1.c:2476
#5 0x5dd238 in del_char /home/dope/sb/vim/src/misc1.c:2449
#6 0x450ddd in stop_insert /home/dope/sb/vim/src/edit.c:6914
#7 0x45592d in ins_esc /home/dope/sb/vim/src/edit.c:8416
#8 0x43e3ee in edit /home/dope/sb/vim/src/edit.c:988
#9 0x6528f6 in invoke_edit /home/dope/sb/vim/src/normal.c:9080
#10 0x652868 in nv_edit /home/dope/sb/vim/src/normal.c:9053
#11 0x62c92f in normal_cmd /home/dope/sb/vim/src/normal.c:1160
#12 0x843a2f in main_loop /home/dope/sb/vim/src/main.c:1342
#13 0x84301b in main /home/dope/sb/vim/src/main.c:1042
#14 0x7fecd052876c in __libc_start_main ??:?
Shadow bytes around the buggy address:
0x0c01000079f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0100007a00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0100007a10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0100007a20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c0100007a30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c0100007a40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa[03]fa
0x0c0100007a50: fa fa 00 03 fa fa fd fa fa fa fd fa fa fa fd fa
0x0c0100007a60: fa fa 01 fa fa fa 00 fa fa fa fd fa fa fa fd fa
0x0c0100007a70: fa fa 02 fa fa fa fd fd fa fa fd fd fa fa fd fd
0x0c0100007a80: fa fa fd fd fa fa fd fd fa fa fd fa fa fa fd fd
0x0c0100007a90: fa fa fd fd fa fa fd fd fa fa fd fa fa fa fd fd
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
==13507== ABORTING
Sorry, no patch as I did not understand Christan's change.
But hopefully the above stack should be enough to figure it out.
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.