summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Wagner <bungeman@chromium.org>2023-01-12 23:45:12 -0500
committerWerner Lemberg <wl@gnu.org>2023-01-17 08:59:25 +0100
commit29f83d1dd5e5ad2aeb8408aac3257026ced6dbb3 (patch)
tree6e47e7e9aa00629314fdcdbd8110b91fec794f15
parent0d4f887c790dc639902cb9ac89f9d099062530cb (diff)
downloadfreetype2-29f83d1dd5e5ad2aeb8408aac3257026ced6dbb3.tar.gz
[base] 'close' callback may not use `stream->memory`.
The documentation for `FT_StreamRec::memory` states that it 'shouldn't be touched by stream implementations'. This is true even for internal implementations of the 'close' callback, since it is not guaranteed that `memory` will even be set when the 'close' callback occurs. * src/base/ftobjs.c (new_memory_stream): stash current `memory` in `stream->descriptor`. (memory_stream_close): Use it.
-rw-r--r--src/base/ftobjs.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index cd20f374f..186a90806 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -1672,7 +1672,7 @@
static void
memory_stream_close( FT_Stream stream )
{
- FT_Memory memory = stream->memory;
+ FT_Memory memory = (FT_Memory)stream->descriptor.pointer;
FT_FREE( stream->base );
@@ -1709,7 +1709,8 @@
FT_Stream_OpenMemory( stream, base, size );
- stream->close = close;
+ stream->descriptor.pointer = memory;
+ stream->close = close;
*astream = stream;