Michael Wookey wrote:

> > Michael Wookey wrote:
> > 
> > > > One bug that I didn't fix. Build gvim.exe with OLE=no, run 'gvim
> > > > - register', and watch it crash while trying to display an error
> > > > message.
> > >
> > > This seems to fix the bug...
> > >
> > > Index: src/message.c
> > > ===================================================================
> > > --- src/message.c (revision 212)
> > > +++ src/message.c (working copy)
> > > @@ -2987,7 +2987,7 @@
> > >       * If 'verbosefile' is set write message in that file.
> > >       * Must come before the rest because of updating "msg_col".
> > >       */
> > > -    if (*p_vfile != NUL)
> > > +    if (p_vfile && *p_vfile != NUL)
> > >   verbose_write(s, maxlen);
> > >
> > >      if (redir_fd != NULL
> > > Index: src/misc2.c
> > > ===================================================================
> > > --- src/misc2.c   (revision 212)
> > > +++ src/misc2.c   (working copy)
> > > @@ -1748,7 +1748,7 @@
> > >   return NULL;
> > >      }
> > >  #endif
> > > -    while ((b = *p) != NUL)
> > > +    while (p && (b = *p) != NUL)
> > >      {
> > >   if (b == c)
> > >       return p;
> > >
> > 
> > Well, that may fix it, but the problem is that the order of
> > initializations is violated.  Normally all option pointers are not
> > NULL.
> 
> I think I've found it.  In src/main.c:main(), the call to gui_prepare()
> needs to occur after set_init_1() for two reasons:
> 
> 1. set_init_1() ends up initialising the options table - and therefore
> p_vfile.
> 
> 2. The win32 implementation of gui_mch_prepare() as called from
> gui_prepare() calls ole_error() in an error path. ole_error() calls
> through to EMSG2() which eventually uses p_vfile.  However since
> gui_prepare() is called before set_init_1(), p_vfile has not yet been
> initialised.
> 
> The attached patch demonstrates the solution by moving gui_prepare()
> after set_init_1().

Changing the order of initializations is tricky.  I would rather not do
this without extensive testing.

Isn't it much simpler to change ole_error() to invoke mch_errmsg()
instead of EMSG2()?

-- 
hundred-and-one symptoms of being an internet addict:
194. Your business cards contain your e-mail and home page address.

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- 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    ///

Reply via email to