Hi
I see the following Valgrind error with Gvim-7.2.402 (GTK2 GUI on Linux).
==12686== Conditional jump or move depends on uninitialised value(s)
==12686== at 0x53A5E0: screen_comp_differs (screen.c:6294)
==12686== by 0x53AB30: screen_puts_len (screen.c:6456)
==12686== by 0x53A177: win_redr_custom (screen.c:6179)
==12686== by 0x539B88: redraw_custom_statusline (screen.c:5948)
==12686== by 0x53969F: win_redr_status (screen.c:5810)
==12686== by 0x52EEC3: update_screen (screen.c:532)
==12686== by 0x4AA976: main_loop (main.c:1128)
==12686== by 0x4AA610: main (main.c:955)
(and more errors after that)
Steps to reproduce:
1) Install the 'taglist' plugin available at:
http://www.vim.org/scripts/script.php?script_id=273
2) Create a minimalistic ~/.vimrc file containing only one line:
filetype plugin on
3) Start gvim with valgrind:
$ valgrind --log-file=vg.log vim -f -g
4) Maximize the gvim window by pressing maximize button of
the Window Manager
5) Type Ex command:
:TlistToggle
6) Observe errors in Valgrind log file 'vg.log' (access to uninitialized
memory)
Code where error happens:
6285 static int
6286 screen_comp_differs(off, u8cc)
6287 int off;
6288 int *u8cc;
6289 {
6290 int i;
6291
6292 for (i = 0; i < Screen_mco; ++i)
6293 {
!!6294 if (ScreenLinesC[i][off] != (u8char_T)u8cc[i])
6295 return TRUE;
6296 if (u8cc[i] == 0)
6297 break;
6298 }
6299 return FALSE;
6300 }
- 'i' and 'off' are initialized.
- ScreenLinesC[i] is also initialized.
- but ScreenLinesC[i][off] is _not_ initialized.
I did a bisection with "hg bisect" between 7.2.100 (good, no bug)
and 7.2.402 (bad):
7.2.100 -> good
7.2.109 -> good
7.2.114 -> good
7.2.116 -> good
7.2.117 -> good
7.2.118 -> good
7.2.119 -> bad
7.2.139 -> bad
7.2.178 -> bad
7.2.258 -> bad
7.2.402 -> bad
The patch which introduces the bug is:
Patch 7.2.119
Problem: Status line is redrawn too often.
Solution: Check ScreeenLinesUC[] properly. (Yukihiro Nakadaira)
Files: src/screen.c
Patch seemed to be only an optimization. But since it breaks
something, we should revert it back I think, unless someone
knows how to fix it? I verified that no error happens when
reverting it (as in attached patch).
Cheers
-- 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.phpdiff -r f63ace015c63 src/screen.c
--- a/src/screen.c Wed Mar 17 20:02:06 2010 +0100
+++ b/src/screen.c Thu Mar 18 19:32:12 2010 +0100
@@ -6461,7 +6461,7 @@
&& c == 0x8e
&& ScreenLines2[off] != ptr[1])
|| (enc_utf8
- && (ScreenLinesUC[off] != (u8char_T)(c >= 0x80 ? u8c : 0)
+ && (ScreenLinesUC[off] != (u8char_T)u8c
|| screen_comp_differs(off, u8cc)))
#endif
|| ScreenAttrs[off] != attr