Solved: Problems with drawing text in 1.3.29

Damian Dixon damian.dixon at gmail.com
Fri Oct 7 15:20:00 CDT 2011


I have narrowed the issue down to a difference in behaviour between Windows
and Wine.

The problem boils down to the following code:


  NONCLIENTMETRICS ncm;
  memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
  ncm.cbSize = sizeof(NONCLIENTMETRICS);

  VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
sizeof(NONCLIENTMETRICS), &ncm, 0));

I used the font's returned from this call for drawing text and this
caused the crash.

The problem is that I upgraded to VS2010 and changed the target to WINVER=0x600.

This means that I needed to change my code to the following.


  NONCLIENTMETRICS ncm;
  memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
  ncm.cbSize = sizeof(NONCLIENTMETRICS);
 #if(WINVER >= 0x0600)
  OSVERSIONINFO osvi;
  memset(&osvi,0,sizeof(osvi));
  osvi.dwOSVersionInfoSize = sizeof(osvi);
  GetVersionEx(&osvi);
  if (osvi.dwMajorVersion < 6)
    ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth); #endif
  VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
sizeof(NONCLIENTMETRICS), &ncm, 0));

Note: On windows my application does not actually crash or stop
working with my original code and the text is displayed at a size I
would kind of expect it to be.

I will raise a bug for this one... as a difference in behaviour.


On 7 October 2011 08:50, Damian Dixon <damian.dixon at gmail.com> wrote:

> Thanks for the suggestions.
>
> I've narrowed one of the issues down to WineEngGetGlyphOutline
> in dlls/gdi32/freetype.c.
>
> The pitch is 6640 and the height is 53003. This means that a buffer of
> ~335Mb has been allocated and then memset.
>
> This is where the slow down is occurring (because of the memset). I suspect
> the resultant crash is also because of this.
>
> I would suggest that limits need to be placed on the maximum pitch and
> height.
>
>
> I do not however believe that this is the root cause just one of the
> symptoms.
>
>
>
> On 5 October 2011 18:37, Marcus Meissner <marcus at jet.franken.de> wrote:
>
>> On Wed, Oct 05, 2011 at 04:53:18PM +0100, Damian Dixon wrote:
>> > Hi,
>> >
>> > I was attempting to use Wine 1.3.29 (in OpenSUSE 11.4 x86) and because
>> of
>> > issues pulled the source from git last night and still have problems.
>> >
>> > I am having performance issues with DrawText (5 odd seconds to draw a
>> simple
>> > string) and the occasional X Error and crash.
>> >
>> > The X Error is consistent and is as follows:
>> >
>> > fixme:advapi:SetSecurityInfo stub
>> > X Error of failed request:  BadLength (poly request too large or
>> internal
>> > Xlib length error)
>> >   Major opcode of failed request:  151 (RENDER)
>> >   Minor opcode of failed request:  17 (RenderCreateGlyphSet)
>> >   Serial number of failed request:  41091
>> >   Current serial number in output stream:  41571
>> > Process of pid=0023 has terminated
>> >
>> >
>> > The crash less consistent but is dependent upon the amount of text I
>> attempt
>> > to draw.
>> >
>> > The last version I know this worked in was 1.1.39.
>> >
>> > I've a few things to still try out before I attempt to create an RBT.
>>
>> To get a backtrace and be able to dump some datastructures, run with
>>
>> WINEDEBUG=+synchronous wine foo.exe
>>
>> This will bring it into the debugger once the condition happens.
>>
>> CIao, MArcus
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20111007/f4191fe6/attachment-0001.html>


More information about the wine-devel mailing list