Thomas Faber : gdi32: Avoid variable-length arrays.
Alexandre Julliard
julliard at winehq.org
Tue Mar 25 14:27:43 CDT 2014
Module: wine
Branch: master
Commit: ff3d728d7421fa898da9b78aedb4ddfdf8dc5e84
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ff3d728d7421fa898da9b78aedb4ddfdf8dc5e84
Author: Thomas Faber <thomas.faber at reactos.org>
Date: Tue Mar 25 08:46:00 2014 +0100
gdi32: Avoid variable-length arrays.
---
dlls/gdi32/bidi.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/dlls/gdi32/bidi.c b/dlls/gdi32/bidi.c
index 1d6be53..066eec3 100644
--- a/dlls/gdi32/bidi.c
+++ b/dlls/gdi32/bidi.c
@@ -596,10 +596,25 @@ BOOL BIDI_Reorder(
if (lpGlyphs && doGlyphs)
{
- BYTE runOrder[maxItems];
- int visOrder[maxItems];
+ BYTE *runOrder;
+ int *visOrder;
SCRIPT_ITEM *curItem;
+ runOrder = HeapAlloc(GetProcessHeap(), 0, maxItems * sizeof(*runOrder));
+ visOrder = HeapAlloc(GetProcessHeap(), 0, maxItems * sizeof(*visOrder));
+ if (!runOrder || !visOrder)
+ {
+ WARN("Out of memory\n");
+ HeapFree(GetProcessHeap(), 0, runOrder);
+ HeapFree(GetProcessHeap(), 0, visOrder);
+ HeapFree(GetProcessHeap(), 0, chartype);
+ HeapFree(GetProcessHeap(), 0, levels);
+ HeapFree(GetProcessHeap(), 0, pItems);
+ HeapFree(GetProcessHeap(), 0, psva);
+ HeapFree(GetProcessHeap(), 0, pwLogClust);
+ return FALSE;
+ }
+
for (j = 0; j < nItems; j++)
runOrder[j] = pItems[j].a.s.uBidiLevel;
@@ -621,6 +636,8 @@ BOOL BIDI_Reorder(
if (!run_glyphs)
{
WARN("Out of memory\n");
+ HeapFree(GetProcessHeap(), 0, runOrder);
+ HeapFree(GetProcessHeap(), 0, visOrder);
HeapFree(GetProcessHeap(), 0, chartype);
HeapFree(GetProcessHeap(), 0, levels);
HeapFree(GetProcessHeap(), 0, pItems);
@@ -655,6 +672,8 @@ BOOL BIDI_Reorder(
glyph_i += cOutGlyphs;
}
}
+ HeapFree(GetProcessHeap(), 0, runOrder);
+ HeapFree(GetProcessHeap(), 0, visOrder);
}
done += i;
More information about the wine-cvs
mailing list