Hi I see a valgrind error with Vim-7.3.237 on Linux sometimes (not all the time) when I enter the Ex command :FufBuffer (command from the fuzzy-finder plugin: http://www.vim.org/scripts/script.php?script_id=1984)
==15342== Conditional jump or move depends on uninitialised value(s) ==15342== at 0x8085221: f_readfile (eval.c:14321) ==15342== by 0x807D828: call_func (eval.c:8380) ==15342== by 0x807E6F1: f_call (eval.c:9098) ==15342== by 0x807D828: call_func (eval.c:8380) ==15342== by 0x807D36F: get_func_tv (eval.c:8193) ==15342== by 0x8079860: eval7 (eval.c:5128) ==15342== by 0x8079179: eval6 (eval.c:4780) ==15342== by 0x8078D6F: eval5 (eval.c:4596) ==15342== by 0x8078309: eval4 (eval.c:4289) ==15342== by 0x8078177: eval3 (eval.c:4201) ==15342== by 0x8078019: eval2 (eval.c:4130) ==15342== by 0x8077E6A: eval1 (eval.c:4055) ==15342== by 0x8077DD5: eval0 (eval.c:4012) ==15342== by 0x8092619: ex_return (eval.c:22322) ==15342== by 0x80A8A10: do_one_cmd (ex_docmd.c:2672) ==15342== by 0x80A62E9: do_cmdline (ex_docmd.c:1123) ==15342== by 0x8091F91: call_user_func (eval.c:22116) ==15342== by 0x807D726: call_func (eval.c:8351) ==15342== by 0x807D36F: get_func_tv (eval.c:8193) ==15342== by 0x8079860: eval7 (eval.c:5128) ==15342== by 0x8079179: eval6 (eval.c:4780) ==15342== by 0x8078D6F: eval5 (eval.c:4596) ==15342== by 0x8078309: eval4 (eval.c:4289) ==15342== by 0x8078177: eval3 (eval.c:4201) ==15342== by 0x8078019: eval2 (eval.c:4130) ==15342== by 0x8077E6A: eval1 (eval.c:4055) ==15342== by 0x8077DD5: eval0 (eval.c:4012) ==15342== by 0x80745B4: ex_let (eval.c:1885) ==15342== by 0x80A8A10: do_one_cmd (ex_docmd.c:2672) ==15342== by 0x80A62E9: do_cmdline (ex_docmd.c:1123) ==15342== by 0x8091F91: call_user_func (eval.c:22116) ==15342== by 0x807D726: call_func (eval.c:8351) ==15342== by 0x807D36F: get_func_tv (eval.c:8193) ==15342== by 0x8079860: eval7 (eval.c:5128) ==15342== by 0x8079179: eval6 (eval.c:4780) ==15342== by 0x8078D6F: eval5 (eval.c:4596) ==15342== by 0x8078309: eval4 (eval.c:4289) ==15342== by 0x8078177: eval3 (eval.c:4201) ==15342== by 0x8078019: eval2 (eval.c:4130) ==15342== by 0x8077E6A: eval1 (eval.c:4055) ==15342== by 0x8077DD5: eval0 (eval.c:4012) ==15342== by 0x80745B4: ex_let (eval.c:1885) ==15342== by 0x80A8A10: do_one_cmd (ex_docmd.c:2672) ==15342== by 0x80A62E9: do_cmdline (ex_docmd.c:1123) ==15342== by 0x8091F91: call_user_func (eval.c:22116) ==15342== by 0x807D726: call_func (eval.c:8351) ==15342== by 0x807D36F: get_func_tv (eval.c:8193) ==15342== by 0x8076FBF: ex_call (eval.c:3435) ==15342== by 0x80A8A10: do_one_cmd (ex_docmd.c:2672) ==15342== by 0x80A62E9: do_cmdline (ex_docmd.c:1123) ==15342== by 0x80AE381: do_ucmd (ex_docmd.c:6168) ==15342== by 0x80A89E7: do_one_cmd (ex_docmd.c:2663) ==15342== by 0x80A62E9: do_cmdline (ex_docmd.c:1123) ==15342== by 0x8125075: nv_colon (normal.c:5352) ==15342== by 0x811E685: normal_cmd (normal.c:1193) ==15342== by 0x81E6A57: main_loop (main.c:1262) ==15342== by 0x81E6480: main (main.c:964) ==15342== Uninitialised value was created by a stack allocation ==15342== at 0x8085046: f_readfile (eval.c:14274) Code around eval.c:14321 14314 while (cnt < maxline || maxline < 0) 14315 { 14316 readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd); 14317 buflen = filtd + readlen; 14318 tolist = 0; 14319 for ( ; filtd < buflen || readlen <= 0; ++filtd) 14320 { !14321 if (buf[filtd] == '\n' || readlen <= 0) 14322 { Adding debug printf, I can see that when error happens readlen is 0 and filtd is 0. So buf[0] is read uninitialized since nothing was read in buf[]. I think that the error is harmless in practice, but attached patch fixes it. 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
diff -r c45a38bd18a9 src/eval.c --- a/src/eval.c Sun Jun 26 19:40:23 2011 +0200 +++ b/src/eval.c Sat Jul 02 19:13:26 2011 +0200 @@ -14318,7 +14318,7 @@ tolist = 0; for ( ; filtd < buflen || readlen <= 0; ++filtd) { - if (buf[filtd] == '\n' || readlen <= 0) + if (readlen <= 0 || buf[filtd] == '\n') { /* In binary mode add an empty list item when the last * non-empty line ends in a '\n'. */