Loading ...
Sorry, an error occurred while loading the content.

Re: BUG: Vim always crashes with some steps

Expand Messages
  • Dominique Pellé
    ... Hi Crash in eval.c described above was reported a long time ago. Attached patch fixes it by making ga_scripts in eval.c a growing array of pointers
    Message 1 of 8 , Apr 30, 2010
    • 0 Attachment
      Bram Moolenaar wrote:

      > Yukihiro Nakadaira wrote:
      >
      >> Kana Natsuno wrote:
      >> > On Mon, 12 Oct 2009 05:03:27 +0900, Bram Moolenaar <Bram@...> wrote:
      >> >> Can you somehow simplify the way to reproduce this and send me the Vim
      >> >> script for this?
      >> >
      >> > Sorry, I tried to simplify before reporting but failed.  Because the
      >> > problem I encountered seems to depend on the number/order of operations,
      >> > and the problem doesn't occur even if I delete a key/value pair
      >> > expression from dictionary literal which seems not to be related to
      >> > executing scripts.
      >> >
      >> > Anyway, I'll try to simplify again.
      >>
      >> Perhaps your problem is ...
      >>
      >> In eval.c, all "s:" dictionary is stored in one array (ga_scripts).
      >> When new script file is sourced, the array is re-allocated for new "s:"
      >> dictionary.  Then "s:" dictionary, previously assigned to other variable
      >> (e.g. :let g:foo = s:), will become an invalid pointer.
      >>
      >>
      >> Script to reproduce: (might not crash 100%)
      >>
      >>    let script_vars = []
      >>    for src in range(10)
      >>      call writefile(['call add(script_vars, s:)'], src)
      >>      source `=src`
      >>      " allocate memory to ensure crash.
      >>      call repeat(' ', 1000)
      >>    endfor
      >>    echo script_vars
      >
      > Very good point.  Thanks for finding this problem.  I'll think about a
      > solution.  Unless someone beats me to it.

      Hi

      Crash in eval.c described above was reported a long time ago.

      Attached patch fixes it by making ga_scripts in eval.c a growing
      array of pointers "scriptvar_T *" rather than growing array of
      structs "scriptvar_T" so that when ga_scripts is reallocated,
      structures don't move in memory.

      I verified that the sample script given by Yukihiro Nakadaira which
      always caused a crash (and errors with Valgrind) no longer crashes
      after patch (and Valgrind no complain either).

      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
    • Bram Moolenaar
      ... Thanks! I ll include it when I have time again. -- You have heard the saying that if you put a thousand monkeys in a room with a thousand typewriters and
      Message 2 of 8 , May 2, 2010
      • 0 Attachment
        Dominique Pelle wrote:

        > Bram Moolenaar wrote:
        >
        > > Yukihiro Nakadaira wrote:
        > >
        > >> Kana Natsuno wrote:
        > >> > On Mon, 12 Oct 2009 05:03:27 +0900, Bram Moolenaar <Bram@...=
        > > wrote:
        > >> >> Can you somehow simplify the way to reproduce this and send me the Vi=
        > m
        > >> >> script for this?
        > >> >
        > >> > Sorry, I tried to simplify before reporting but failed. =A0Because the
        > >> > problem I encountered seems to depend on the number/order of operation=
        > s,
        > >> > and the problem doesn't occur even if I delete a key/value pair
        > >> > expression from dictionary literal which seems not to be related to
        > >> > executing scripts.
        > >> >
        > >> > Anyway, I'll try to simplify again.
        > >>
        > >> Perhaps your problem is ...
        > >>
        > >> In eval.c, all "s:" dictionary is stored in one array (ga_scripts).
        > >> When new script file is sourced, the array is re-allocated for new "s:"
        > >> dictionary. =A0Then "s:" dictionary, previously assigned to other variab=
        > le
        > >> (e.g. :let g:foo =3D s:), will become an invalid pointer.
        > >>
        > >>
        > >> Script to reproduce: (might not crash 100%)
        > >>
        > >> =A0 =A0let script_vars =3D []
        > >> =A0 =A0for src in range(10)
        > >> =A0 =A0 =A0call writefile(['call add(script_vars, s:)'], src)
        > >> =A0 =A0 =A0source `=3Dsrc`
        > >> =A0 =A0 =A0" allocate memory to ensure crash.
        > >> =A0 =A0 =A0call repeat(' ', 1000)
        > >> =A0 =A0endfor
        > >> =A0 =A0echo script_vars
        > >
        > > Very good point. =A0Thanks for finding this problem. =A0I'll think about =
        > a
        > > solution. =A0Unless someone beats me to it.
        >
        > Hi
        >
        > Crash in eval.c described above was reported a long time ago.
        >
        > Attached patch fixes it by making ga_scripts in eval.c a growing
        > array of pointers "scriptvar_T *" rather than growing array of
        > structs "scriptvar_T" so that when ga_scripts is reallocated,
        > structures don't move in memory.
        >
        > I verified that the sample script given by Yukihiro Nakadaira which
        > always caused a crash (and errors with Valgrind) no longer crashes
        > after patch (and Valgrind no complain either).

        Thanks! I'll include it when I have time again.

        --
        You have heard the saying that if you put a thousand monkeys in a room with a
        thousand typewriters and waited long enough, eventually you would have a room
        full of dead monkeys.
        (Scott Adams - The Dilbert principle)

        /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
        /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
        \\\ download, build and distribute -- http://www.A-A-P.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
      Your message has been successfully submitted and would be delivered to recipients shortly.