summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2021-09-24 03:48:09 +0000
committerAlexei Podtelezhnikov <apodtele@gmail.com>2021-09-24 03:48:09 +0000
commiteaa216ea77bc2fe222b47ea13cee8fcdeba01161 (patch)
treea95b6d7adf031325595fdee74da43f8bc2db5fd8
parenta29e020059ca6f73a212ec76af94b22a694ad765 (diff)
downloadfreetype2-signed_OFF3.tar.gz
Signed 24-bit values need sign expansion into 32 bits. Only PFR driver, only in bitmap strikes, and signed_OFF3
only conditionally uses the signed 24-bit values to specify the bitmap positioning and advance. Therefore this bug could never be captured.
-rw-r--r--include/freetype/internal/ftstream.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h
index 72dd58517..187eaa6c5 100644
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -196,9 +196,9 @@ FT_BEGIN_HEADER
FT_BYTE_U32( p, 2, 8 ) | \
FT_BYTE_U32( p, 3, 0 ) )
-#define FT_PEEK_OFF3( p ) FT_INT32( FT_BYTE_U32( p, 0, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 2, 0 ) )
+#define FT_PEEK_OFF3( p ) ( FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \
+ FT_BYTE_U32( p, 1, 16 ) | \
+ FT_BYTE_U32( p, 2, 8 ) ) >> 8 )
#define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
FT_BYTE_U32( p, 1, 8 ) | \
@@ -220,9 +220,9 @@ FT_BEGIN_HEADER
FT_BYTE_U32( p, 1, 8 ) | \
FT_BYTE_U32( p, 0, 0 ) )
-#define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_BYTE_U32( p, 2, 16 ) | \
- FT_BYTE_U32( p, 1, 8 ) | \
- FT_BYTE_U32( p, 0, 0 ) )
+#define FT_PEEK_OFF3_LE( p ) ( FT_INT32( FT_BYTE_U32( p, 2, 24 ) | \
+ FT_BYTE_U32( p, 1, 16 ) | \
+ FT_BYTE_U32( p, 0, 8 ) ) >> 8 )
#define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
FT_BYTE_U32( p, 1, 8 ) | \