Vincent Povirk : gdiplus: Prevent NULL StringFormat in gdip_format_string.
Alexandre Julliard
julliard at winehq.org
Mon Apr 14 14:18:56 CDT 2014
Module: wine
Branch: master
Commit: 4def66c11c92fc229cb7e47781dbdadb3c8344ed
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4def66c11c92fc229cb7e47781dbdadb3c8344ed
Author: Vincent Povirk <vincent at 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;
}
More information about the wine-cvs
mailing list