ref: e40e8b33a1e925c7f9db57bedac4014f57481232
parent: db5a4a9ae7b0048f033361744421da8569642f73
author: Werner Lemberg <[email protected]>
date: Sun Sep 13 04:05:50 EDT 2015
[gzip] Fix access of small compressed files (#45937). * src/gzip/ftgzip.c (ft_gzip_stream_close): Avoid memory leak. (ft_gzip_get_uncompressed_file): Correct byte order while reading unsigned long value. Without this change, the whole optimization of accessing small files in `FT_Stream_OpenGzip' is never executed! As a consequence, access to PCF files in general (which are normally small files) should be much improved now as originally intended.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2015-09-13 Werner Lemberg <[email protected]>
+
+ [gzip] Fix access of small compressed files (#45937).
+
+ * src/gzip/ftgzip.c (ft_gzip_stream_close): Avoid memory leak.
+
+ (ft_gzip_get_uncompressed_file): Correct byte order while reading
+ unsigned long value. Without this change, the whole optimization of
+ accessing small files in `FT_Stream_OpenGzip' is never executed! As
+ a consequence, access to PCF files in general (which are normally
+ small files) should be much improved now as originally intended.
+
2015-09-11 Werner Lemberg <[email protected]>
[psaux] Fix potential buffer overflow (#45922).
--- a/src/gzip/ftgzip.c
+++ b/src/gzip/ftgzip.c
@@ -557,6 +557,9 @@
stream->descriptor.pointer = NULL;
}
+
+ if ( !stream->read )
+ FT_FREE( stream->base );
}
@@ -584,7 +587,7 @@
old_pos = stream->pos;
if ( !FT_Stream_Seek( stream, stream->size - 4 ) )
{
- result = FT_Stream_ReadULong( stream, &error );
+ result = FT_Stream_ReadULongLE( stream, &error );
if ( error )
result = 0;
@@ -685,7 +688,7 @@
stream->size = 0x7FFFFFFFL; /* don't know the real size! */
stream->pos = 0;
- stream->base = 0;
+ stream->base = NULL;
stream->read = ft_gzip_stream_io;
stream->close = ft_gzip_stream_close;