Fix multiple calls of `FT_Bitmap_Convert'.
The documentation of `FT_Bitmap_Convert' says that multiple calls do proper reallocation of the target FT_Bitmap object. However, this failed for the sequence non-empty bitmap empty bitmap non-empty bitmap Reason was that `FT_Bitmap_Convert' only reallocated the bitmap buffer if it became too small; it didn't make the buffer smaller. For an empty bitmap following a non-empty one, only the buffer dimension got set to zero, without deallocation. If the next call was a non-empty buffer again, an assertion in `ft_mem_qrealloc' was triggered. * src/base/ftbitmap.c (FT_Bitmap_Convert): Always reallocate target buffer to the correct size. * docs/CHANGES: Document it.
This commit is contained in:
parent
7d017ba810
commit
a3dd6d99a4
24
ChangeLog
24
ChangeLog
@ -1,3 +1,27 @@
|
||||
2017-09-05 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
Fix multiple calls of `FT_Bitmap_Convert'.
|
||||
|
||||
The documentation of `FT_Bitmap_Convert' says that multiple calls do
|
||||
proper reallocation of the target FT_Bitmap object. However, this
|
||||
failed for the sequence
|
||||
|
||||
non-empty bitmap
|
||||
empty bitmap
|
||||
non-empty bitmap
|
||||
|
||||
Reason was that `FT_Bitmap_Convert' only reallocated the bitmap
|
||||
buffer if it became too small; it didn't make the buffer smaller.
|
||||
For an empty bitmap following a non-empty one, only the buffer
|
||||
dimension got set to zero, without deallocation. If the next call
|
||||
was a non-empty buffer again, an assertion in `ft_mem_qrealloc' was
|
||||
triggered.
|
||||
|
||||
* src/base/ftbitmap.c (FT_Bitmap_Convert): Always reallocate target
|
||||
buffer to the correct size.
|
||||
|
||||
* docs/CHANGES: Document it.
|
||||
|
||||
2017-09-05 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[bdf] Fix size and resolution handling.
|
||||
|
@ -54,6 +54,10 @@ CHANGES BETWEEN 2.8 and 2.8.1
|
||||
missing. Previously, `SIZE' was completely ignored, and
|
||||
FreeType used heuristic values instead.
|
||||
|
||||
- Multiple calls to `FT_Bitmap_Convert' do work now as advertised.
|
||||
Previously, they failed with an assertion error if there was an
|
||||
empty bitmap between non-empty ones.
|
||||
|
||||
|
||||
======================================================================
|
||||
|
||||
|
@ -534,8 +534,7 @@
|
||||
(FT_ULong)target->rows > FT_ULONG_MAX / (FT_ULong)target_pitch )
|
||||
return FT_THROW( Invalid_Argument );
|
||||
|
||||
if ( target->rows * (FT_ULong)target_pitch > old_size &&
|
||||
FT_QREALLOC( target->buffer,
|
||||
if ( FT_QREALLOC( target->buffer,
|
||||
old_size, target->rows * (FT_UInt)target_pitch ) )
|
||||
return error;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user