[PATCH] comctl32: Avoid an unneeded lstrlenW() call.

Francois Gouget fgouget at free.fr
Mon Oct 22 04:19:52 CDT 2018


On Mon, 22 Oct 2018, Dmitry Timoshkov wrote:

> Zhiyi Zhang <zzhang at codeweavers.com> wrote:
> 
> > > @@ -2435,7 +2435,7 @@ TOOLBAR_CustomizeDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
> > >                      btnInfo->btn = nmtb.tbButton;
> > >                      if (!(nmtb.tbButton.fsStyle & BTNS_SEP))
> > >                      {
> > > -                        if (lstrlenW(nmtb.pszText))
> > > +                        if (*nmtb.pszText)]
> > There is a behavior change with this modification. lstrlenW won't crash even if applications somehow
> > replaced pszText with null. So we might want to check that pszText is not null before deferencing it.
> 
> Have a look at include/winbase.h: lstr* APIs in Wine code are silently
> replaced by inline versions without an exception handler.

Right. In the patch I forgot to mention that I checked Wine's 
lstrlen{A,W}() implementation in winbase.h but I forgot to check what 
the MSDN says (or the kernel32/string.c implementation). Given the 
inconsistency that's all the more reason to avoid using lstrlen{A,W}() 
in such a case (or at all actually).

In this case nmtb.pszText is set to Buffer which is a WCHAR Buffer[256]. 
So it cannot be NULL and MSDN's lstrlenW() exception handler would not 
be needed anyway.


-- 
Francois Gouget <fgouget at free.fr>              http://fgouget.free.fr/
 Advice is what we ask for when we already know the answer but wish we didn't
                                 -- Eric Jong



More information about the wine-devel mailing list