freetype-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]