From 4def66c11c92fc229cb7e47781dbdadb3c8344ed Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Mon, 14 Apr 2014 11:44:20 -0500 Subject: [PATCH] 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 56d785e1aef..861d16018be 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; } -- 2.11.4.GIT