[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [ft-devel] Freetype limits or integer overflows
From: |
Werner LEMBERG |
Subject: |
Re: [ft-devel] Freetype limits or integer overflows |
Date: |
Fri, 16 Nov 2012 14:40:43 +0100 (CET) |
> What is the Freetype policy and/or goals with regard to integer
> overflows?
Overflows should be avoided. If you need an exact bit width, use
FT_Int{16,32}. 64bit variables are nowhere used except in code
guarded with FT_LONG64 (however, the code should be written so that it
works with FT_Int having a width of 64 bits). If you really need
64bit intermediate precision, you should use FT_MulDiv and friends.
> How practical are the large sizes that push outline dimensions
> beyond 16 bits, or pixel size of 1024?
They can happen. At 600dpi, a glyph with a height of two inches (as
might happen in a newspaper headline) has a pixel size of 1200. Given
that recent screens for tablets have resolution up to 400dpi, it is
more important than ever that large pixel sizes work OK.
> In a few places I see 64-bit arithmetic utilized to control the
> overflow by means of FT_Int64. This integer type is not even
> documented.
They are local to the ftcalc.c module. And the stuff in fttrigon.c is
wrong, but gets never compiled due to an incorrect #ifdef. I'll fix
that.
> When is it ok to use this type?
Only in ftcalc.c, and you have to write two versions for use with and
without FT_LONG64.
> For example, when I calculate a dot product of 2 vectors, which is a
> very basic task. If dimensions are limited to 16-bits, the dot
> product would fit into 32 bits, so there is no need to worry about
> the overflow here.
Exactly. However, to multiply two 32bit entities, you need something
better, and 26.6 and 16.16 data types are frequently used.
If you *really* need some special computation with 64bit
intermediates, please add a function to ftcalc.c.
Werner