freetype2/include/freetype/internal
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
..
services [truetype, snft] Add service methods for `DeltaSetIdxMap` and `VarStore`. 2022-05-19 07:14:05 +02:00
autohint.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
cffotypes.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
cfftypes.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
compiler-macros.h Add Watcom C/C++ calling. 2022-01-15 22:44:28 -05:00
ftcalc.h Add Watcom C/C++ support. 2022-01-14 22:07:44 -05:00
ftdebug.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftdrv.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftgloadr.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
fthash.h Remove redundant inclusion of `ft2build.h'. 2020-06-13 21:15:45 +02:00
ftmemory.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftmmtypes.h [truetype] Support reading 32bit/16bit VarStore deltas 2022-05-23 16:18:28 +03:00
ftobjs.h Add code to load OT-SVG glyph documents. 2022-01-20 16:45:18 +00:00
ftpsprop.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftrfork.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftserv.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
ftstream.h [stream] Fix reading s32 when long is s64 2022-06-18 12:58:23 -04:00
fttrace.h Add 'svg' module for OT-SVG rendering. 2022-01-20 16:45:18 +00:00
ftvalid.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
psaux.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
pshints.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
sfnt.h Add code to load OT-SVG glyph documents. 2022-01-20 16:45:18 +00:00
svginterface.h Add 'svg' module for OT-SVG rendering. 2022-01-20 16:45:18 +00:00
t1types.h Update all copyright notices. 2022-01-11 10:54:10 +01:00
tttypes.h Add code to load OT-SVG glyph documents. 2022-01-20 16:45:18 +00:00
wofftypes.h Update all copyright notices. 2022-01-11 10:54:10 +01:00