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