freetype2/src
Ben Wagner f7daf9d293 [stream] Fix reading s32 when long is s64
`FT_READ_LONG`, `FT_GET_LONG`, and related macros did not return
negative values when `long` is more than 32 bits. `FT_Stream_ReadULong`
would read four bytes into the LSB of an `FT_ULong` and return that.
Since this can never set the MSb of the `FT_ULong` when `FT_ULong` is
more than 32 bits the cast to `FT_Long` never resulted in a negative
value.

Fix this by modifying `FT_Stream_Read*` to return a type of the same
size as the bytes it is reading and changing the `FT_READ_*` and
`FT_GET_*` macros to cast to the same type returned by `FT_Stream_Read*`
but with the correctly signed type (instead of casting to what is
assumed to be the type of `var` which will happen automatically anyway).

There exist a few cases like with the `OFF3` variants where there isn't
generally a type with the correct size. `FT_PEEK_OFF3` works around this
loading the bytes into the three most significant bits and then doing a
signed shift down. `FT_NEXT_OFF3` also already worked correctly by
casting this signed value to another signed type. `FT_Stream_GetUOffset`
works correctly but one must be careful not to attempt to cast the
returned value to a signed type. Fortunately there is only
`FT_GET_UOFF3` and no `FT_GET_OFF3`.

All of these cases are handled correctly when reading values through
`FT_Stream_ReadFields` since it generically computes the signed value
through an `FT_Int32`. This change is essentially doing the same for
these macros.

* include/freetype/internal/ftstream.h (FT_NEXT_*, FT_GET_*, FT_READ*):
Update macros and return types to use fixed size types for fixed size
values.

* src/base/ftstream.c (FT_StreamGet*, FT_StreamRead*): Dito.

Issue: #1161
2022-06-18 12:58:23 -04:00
..
autofit * src/autofit/afglobal.c (af_face_globals_new): Reduce zeroing. 2022-01-18 14:05:46 -05:00
base [stream] Fix reading s32 when long is s64 2022-06-18 12:58:23 -04:00
bdf * src/bdf/README: Updated. 2022-02-19 13:37:07 +01:00
bzip2 Whitespace. 2022-04-01 08:50:33 +02:00
cache Whitespace. 2022-04-01 08:50:33 +02:00
cff [svg] Set linear advances when loading SVG glyphs 2022-06-06 16:55:17 -04:00
cid Update all copyright notices. 2022-01-11 10:54:10 +01:00
dlg Update all copyright notices. 2022-01-11 10:54:10 +01:00
gxvalid Whitespace. 2022-04-01 08:50:33 +02:00
gzip [gzip] Handle inflate returning Z_NEED_DICT 2022-06-14 04:49:29 +00:00
lzw * src/lzw/ftzopen.c (ft_lzwstate_stack_grow): Cosmetic macro change. 2022-06-11 23:47:19 -04:00
otvalid Update all copyright notices. 2022-01-11 10:54:10 +01:00
pcf [pcf] Delay encoding allocation and avoid its zeroing. 2022-01-26 11:23:38 -05:00
pfr Whitespace. 2022-04-01 08:50:33 +02:00
psaux Whitespace. 2022-04-01 08:50:33 +02:00
pshinter Fix clang++ warnings. 2022-03-31 07:49:35 +02:00
psnames Update all copyright notices. 2022-01-11 10:54:10 +01:00
raster Whitespace. 2022-04-01 08:50:33 +02:00
sdf [sdf] Do not throw errors for invisible glyphs. 2022-04-30 19:38:11 +02:00
sfnt [woff] Don't allocate table entries until needed 2022-06-13 15:32:28 -04:00
smooth [smooth] Fix GCC LTO crashes on Windows. 2022-06-10 11:34:56 -04:00
svg * src/svg/ftsvg.c (ft_svg_property_set): Disallow NULL pointers. 2022-01-23 19:05:15 +01:00
tools Update all copyright notices. 2022-01-11 10:54:10 +01:00
truetype [truetype/GX] Fix an old typo. 2022-06-16 22:13:25 -04:00
type1 [type1] Directly search for eexec in private dict 2022-06-16 14:51:57 +00:00
type42 Whitespace. 2022-04-01 08:50:33 +02:00
winfonts Whitespace. 2022-04-01 08:50:33 +02:00