From f631542dae1aaf9101135ed660cd3ff1d08ed93c Mon Sep 17 00:00:00 2001 From: Alexei Podtelezhnikov Date: Tue, 27 Apr 2021 11:39:58 -0400 Subject: [PATCH] [lzw] Preserve decompression stack when relocating to heap. * src/lzw/ftzopen.c (ft_lzwstate_stack_grow): Copy stack when relocating to heap. --- ChangeLog | 7 +++++++ src/lzw/ftzopen.c | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a1e66e069..5f61c1cd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2021-04-27 Alexei Podtelezhnikov + + [lzw] Preserve decompression stack when relocating to heap. + + * src/lzw/ftzopen.c (ft_lzwstate_stack_grow): Copy stack when + relocating to heap. + 2021-04-27 Alexei Podtelezhnikov * src/cid/cidgload.c (cid_load_glyph): Restore the glyph_length check. diff --git a/src/lzw/ftzopen.c b/src/lzw/ftzopen.c index 0c61af0f0..8b5b357f3 100644 --- a/src/lzw/ftzopen.c +++ b/src/lzw/ftzopen.c @@ -127,6 +127,7 @@ new_size = new_size + ( new_size >> 1 ) + 4; + /* if relocating to heap */ if ( state->stack == state->stack_0 ) { state->stack = NULL; @@ -142,9 +143,13 @@ return -1; } - if ( FT_RENEW_ARRAY( state->stack, old_size, new_size ) ) + if ( FT_QRENEW_ARRAY( state->stack, old_size, new_size ) ) return -1; + /* if relocating to heap */ + if ( old_size == 0 ) + FT_MEM_COPY( state->stack, state->stack_0, FT_LZW_DEFAULT_STACK_SIZE ); + state->stack_size = new_size; } return 0;