> Hi Bram,
>
> > 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().I was over anxious! - attached is the correct patch. The gui_prepare() must also appear before command_line_scan() so that the "-register" is recognised. cheers
ole_register_corrected.patch
Description: ole_register_corrected.patch
