freetype2/src/base
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
..
ftadvanc.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftbase.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftbase.h Add `FT_Glyph` support for OT-SVG glyphs. 2022-01-20 16:45:18 +00:00
ftbbox.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftbdf.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftbitmap.c [sfnt] Improve sRGB constants. 2022-01-27 08:43:19 +01:00
ftcalc.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftcid.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftcolor.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftdbgmem.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftdebug.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
fterrors.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftfntfmt.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftfstype.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftgasp.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftgloadr.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftglyph.c Fix clang++ warnings. 2022-03-31 07:49:35 +02:00
ftgxval.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
fthash.c * src/base/fthash.c (hash_insert): Avoid unnecessary zeroing. 2022-01-14 18:22:23 +00:00
ftinit.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftlcdfil.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftmac.c Whitespace. 2022-04-01 08:50:33 +02:00
ftmm.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftobjs.c [svg] Clear correct flags for doc ownership 2022-06-01 17:27:38 +00:00
ftotval.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftoutln.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftpatent.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftpfr.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftpsprop.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftrfork.c Whitespace. 2022-04-01 08:50:33 +02:00
ftsnames.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftstream.c [stream] Fix reading s32 when long is s64 2022-06-18 12:58:23 -04:00
ftstroke.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftsynth.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftsystem.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
fttrigon.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
fttype1.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftutil.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftver.rc * Version 2.12.1 released. 2022-05-01 07:09:34 +02:00
ftwinfnt.c Update all copyright notices. 2022-01-11 10:54:10 +01:00
md5.c * src/base/md5.c: Updated to recent version. 2016-06-16 06:17:54 +02:00
md5.h * src/base/md5.c, src/base/md5.h: Updated to recent version. 2013-10-22 01:10:10 +02:00
rules.mk Update all copyright notices. 2022-01-11 10:54:10 +01:00