[PATCH 3/5] usp10: Double the languages array size when growing it in GPOS_expand_language_cache().

Henri Verbeet hverbeet at codeweavers.com
Mon Mar 27 15:57:02 CDT 2017


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/usp10/opentype.c       | 13 +++++++++----
 dlls/usp10/usp10_internal.h |  3 ++-
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/dlls/usp10/opentype.c b/dlls/usp10/opentype.c
index aa3d654..f089a0f 100644
--- a/dlls/usp10/opentype.c
+++ b/dlls/usp10/opentype.c
@@ -2705,10 +2705,15 @@ static void GPOS_expand_language_cache(LoadedScript *script)
 
             if (!(language = usp10_script_get_language(script, tag)))
             {
-                script->language_count++;
-                script->languages = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
-                        script->languages, script->language_count * sizeof(*script->languages));
-                language = &script->languages[script->language_count - 1];
+                if (!usp10_array_reserve((void **)&script->languages, &script->languages_size,
+                        script->language_count + 1, sizeof(*script->languages)))
+                {
+                    ERR("Failed grow languages array.\n");
+                    return;
+                }
+
+                language = &script->languages[script->language_count];
+                ++script->language_count;
                 language->tag = tag;
             }
             language->gpos_table = (const BYTE *)table + offset;
diff --git a/dlls/usp10/usp10_internal.h b/dlls/usp10/usp10_internal.h
index 22e4aad..0952919 100644
--- a/dlls/usp10/usp10_internal.h
+++ b/dlls/usp10/usp10_internal.h
@@ -164,8 +164,9 @@ typedef struct {
     const void *gpos_table;
     LoadedLanguage default_language;
     BOOL languages_initialized;
-    INT language_count;
     LoadedLanguage *languages;
+    size_t languages_size;
+    size_t language_count;
 } LoadedScript;
 
 typedef struct {
-- 
2.1.4




More information about the wine-patches mailing list