Henri Verbeet : usp10: Double the languages array size when growing it in GPOS_expand_language_cache ().

Alexandre Julliard julliard at winehq.org
Tue Mar 28 15:38:41 CDT 2017


Module: wine
Branch: master
Commit: 0ffd5b45ea610ffe9c0c4c7803cb3d98d64760ec
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0ffd5b45ea610ffe9c0c4c7803cb3d98d64760ec

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Mar 27 22:57:02 2017 +0200

usp10: Double the languages array size when growing it in GPOS_expand_language_cache().

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/usp10/opentype.c       | 15 ++++++++++-----
 dlls/usp10/usp10_internal.h |  3 ++-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/dlls/usp10/opentype.c b/dlls/usp10/opentype.c
index 3786473..2731c44 100644
--- a/dlls/usp10/opentype.c
+++ b/dlls/usp10/opentype.c
@@ -2646,7 +2646,7 @@ static void GSUB_initialize_language_cache(LoadedScript *script)
 
         if (script->language_count)
         {
-            TRACE("Deflang %p, LangCount %i\n",script->default_language.gsub_table, script->language_count);
+            TRACE("Deflang %p, LangCount %li\n",script->default_language.gsub_table, script->language_count);
 
             script->languages = heap_alloc_zero(script->language_count * sizeof(*script->languages));
 
@@ -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 9a8b5131..2dfca86 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 {




More information about the wine-cvs mailing list