Module: wine Branch: master Commit: 4def66c11c92fc229cb7e47781dbdadb3c8344ed URL: http://source.winehq.org/git/wine.git/?a=commit;h=4def66c11c92fc229cb7e47781...
Author: Vincent Povirk vincent@codeweavers.com Date: Mon Apr 14 11:44:20 2014 -0500
gdiplus: Prevent NULL StringFormat in gdip_format_string.
---
dlls/gdiplus/graphics.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 56d785e..861d160 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -4392,12 +4392,24 @@ GpStatus gdip_format_string(HDC hdc, INT hotkeyprefix_count=0; INT hotkeyprefix_pos=0, hotkeyprefix_end_pos=0; BOOL seen_prefix = FALSE; + GpStringFormat *dyn_format=NULL;
if(length == -1) length = lstrlenW(string);
stringdup = GdipAlloc((length + 1) * sizeof(WCHAR)); if(!stringdup) return OutOfMemory;
+ if (!format) + { + stat = GdipStringFormatGetGenericDefault(&dyn_format); + if (stat != Ok) + { + GdipFree(stringdup); + return stat; + } + format = dyn_format; + } + nwidth = rect->Width; nheight = rect->Height; if (ignore_empty_clip) @@ -4406,10 +4418,7 @@ GpStatus gdip_format_string(HDC hdc, if (!nheight) nheight = INT_MAX; }
- if (format) - hkprefix = format->hkprefix; - else - hkprefix = HotkeyPrefixNone; + hkprefix = format->hkprefix;
if (hkprefix == HotkeyPrefixShow) { @@ -4450,8 +4459,7 @@ GpStatus gdip_format_string(HDC hdc,
length = j;
- if (format) halign = format->align; - else halign = StringAlignmentNear; + halign = format->align;
while(sum < length){ GetTextExtentExPointW(hdc, stringdup + sum, length - sum, @@ -4544,13 +4552,13 @@ GpStatus gdip_format_string(HDC hdc, break;
/* Stop if this was a linewrap (but not if it was a linebreak). */ - if ((lret == fitcpy) && format && - (format->attr & StringFormatFlagsNoWrap)) + if ((lret == fitcpy) && (format->attr & StringFormatFlagsNoWrap)) break; }
GdipFree(stringdup); GdipFree(hotkeyprefix_offsets); + GdipDeleteStringFormat(dyn_format);
return stat; }