diff options
author | Ben Wagner <bungeman@chromium.org> | 2023-01-12 23:45:12 -0500 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2023-01-17 08:59:25 +0100 |
commit | 29f83d1dd5e5ad2aeb8408aac3257026ced6dbb3 (patch) | |
tree | 6e47e7e9aa00629314fdcdbd8110b91fec794f15 | |
parent | 0d4f887c790dc639902cb9ac89f9d099062530cb (diff) | |
download | freetype2-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.c | 5 |
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; |