Module: wine Branch: master Commit: 0ffd5b45ea610ffe9c0c4c7803cb3d98d64760ec URL: http://source.winehq.org/git/wine.git/?a=commit;h=0ffd5b45ea610ffe9c0c4c7803...
Author: Henri Verbeet hverbeet@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@codeweavers.com Signed-off-by: Aric Stewart aric@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 {