Commit Graph

4016 Commits

Author SHA1 Message Date
Tomas Hoger 487913d9a6 Slightly improve LZW_CLEAR handling.
* src/lzw/ftzopen.c (ft_lzwstate_io) <FT_LZW_PHASE_CODE>:
Ensure that subsequent (modulo garbage byte(s)) LZW_CLEAR codes are
handled as clear codes.  This also re-sets old_code and old_char to
predictable values, which is a little better than using `random'
ones if the code following LZW_CLEAR is invalid.
2011-09-11 09:18:10 +02:00
Tomas Hoger 83cb6c0049 Add explicit LZW decompression stack size limit.
Stack larger than 1<<LZW_MAX_BITS is never needed if prefix table is
constructed correctly.  It's even less than that, see e.g.
libarchive code comment for a better size upper bound:

  http://code.google.com/p/libarchive/source/browse/trunk/libarchive/archive_read_support_filter_compress.c?r=3635#121

This patch adds explicit stack size limit, enforced when stack is
realloced.

An alternative is to ensure that code < state->prefix[code - 256]
when traversing prefix table.  Such check is less efficient and
should not be required if prefix table is constructed correctly in
the first place.

* src/lzw/ftzopen.c (ft_lzwstate_stack_grow): Implement it.
2011-09-11 09:13:45 +02:00
Tomas Hoger 86c3c69c15 Protect against loops in the prefix table.
LZW decompressor did not sufficiently check codes read from the
input LZW stream.  A specially-crafted or corrupted input could
create a loop in the prefix table, which leads to memory usage
spikes, as there's no decompression stack size limit.

* src/lzw/ftzopen.c (ft_lzwstate_io) <FT_LZW_PHASE_START>: First
code in valid LZW stream must be 0..255.
<FT_LZW_PHASE_CODE>: In the special KwKwK case, code == free_ent,
code > free_ent is invalid.
2011-09-11 09:08:40 +02:00
Werner Lemberg 57b6a6148d Better tracing of metrics.
* src/base/ftobjs.c (FT_Request_Size, FT_Select_Size): Decorate with
FT_TRACE.
2011-09-09 19:05:54 +02:00
Werner Lemberg bb211ce6ce Fix Savannah bug #33816.
* src/cff/cfftypes.h (CFF_FontRecDictRec): New member
`has_font_matrix'.
* src/cff/cffparse.c (cff_parse_font_matrix): Set it.
Update tracing output.
* src/cff/cffobjs.c (cff_face_init): Use it so that the heuristics
can be removed.
2011-09-07 15:01:20 +02:00
Werner Lemberg c9a69022dc Typo. 2011-08-30 08:09:38 +02:00
Werner Lemberg 51ca771ff6 Better tracing of metrics.
* src/base/ftobjs.c (FT_Select_Metrics, FT_Request_Metrics):
Decorate with FT_TRACE.
2011-08-30 07:42:19 +02:00
Werner Lemberg 35ab70c19c [cff] Better tracing of the parsing process.
* src/cff/cffload.c (cff_subfont_load, cff_font_load): Decorate with
FT_TRACE.

* src/cff/cffparse.c (cff_parse_font_matrix, cff_parse_font_bbox,
cff_parse_private_dict, cff_parse_cid_ros): Updated.
(CFF_FIELD_NUM, CFF_FIELD_FIXED, CFF_FIELD_FIXED_1000,
CFF_FIELD_STRING, CFF_FIELD_BOOL, CFF_FIELD_CALLBACK, CFF_FIELD,
CFF_FIELD_DELTA): Add argument for ID.
(cff_parser_run): Decorate with FT_TRACE.

* src/cff/cffparse.h (CFF_Field_Handler) [FT_DEBUG_LEVEL_TRACE]: Add
`id' member.

* src/cff/cfftoken.h: Add IDs to all fields.
2011-08-25 13:41:16 +02:00
Werner Lemberg aeaa1619de [cff] Formatting, minor code clean-ups. 2011-08-24 20:50:25 +02:00
Werner Lemberg c3fb981e2a Fix Savannah bug #34022.
* README, docs/INSTALL: Remove references to UPGRADE.UNIX.
2011-08-16 16:04:33 +02:00
Werner Lemberg fa5c2e914e Fix Savannah bug #34018.
* doc/UPGRADE.UNIX: Removed.  Obsolete.
2011-08-15 17:46:40 +02:00
David Bevan 864c426eff Fix Savannah bug #33992.
* src/base/ftstroke.c (FT_Stroker_ParseOutline): Fix border case.
2011-08-15 17:34:01 +02:00
Werner Lemberg bad0160c16 [truetype] Fix degenerate case in S{P,F,DP}VTL opcodes.
* src/truetype/ttinterp.c (Ins_SxVTL): Handle p1 == p2 specially.
(Ins_SDPVTL): Handle v1 == v2 specially.
2011-08-12 19:50:13 +02:00
Werner Lemberg b91e785308 Fix Savannah bug #33975.
* src/cff/cffparse.c (cff_parse_font_matrix): Fix typo.
2011-08-09 17:48:44 +02:00
Werner Lemberg 22e44e067b [truetype] Remove incorrect comments. 2011-08-05 09:57:17 +02:00
Werner Lemberg f2573a0611 [truetype] Fix some comments in the bytecode interpreter.
Thanks to Greg Hitchcock!
2011-08-05 09:07:21 +02:00
Werner Lemberg 29a7965fd1 * Version 2.4.6 released.
=========================

Tag sources with `VER-2-4-6'.

* docs/CHANGES: Updated.

* docs/VERSION.DLL: Update documentation and bump version number to
2.4.6.

* README, Jamfile (RefDoc),
builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj,
builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
builds/win32/visualce/freetype.vcproj,
builds/win32/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.4.5/2.4.6/, s/245/246/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 6.

* builds/unix/configure.raw (version_info): Set to 13:1:7.
2011-07-29 06:23:27 +02:00
Werner Lemberg e7d42366f1 [cff] Add some more tracing infos.
* src/cff/cffparse.c (cff_parse_font_matrix, cff_parse_font_bbox,
cff_parse_cid_ros): Add tracing.
2011-07-29 06:15:20 +02:00
Dirk Müller b03c4a0a3f [psaux, type1] Fix null pointer dereferences.
Found with font fuzzying.

* src/psaux/t1decode.c (t1_decoder_parse_charstrings): Check
`decoder->buildchar'.

* src/type1/t1load.c (t1_load_keyword): Check `blend->num_designs'.
2011-07-22 05:24:11 +02:00
Chris Morgan 3abf617b5e Add FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT.
Useful for embedded systems which don't need file stream support.

* src/base/ftsystem.c, src/base/ftobjs.c (FT_Stream_New): Implement
it.
2011-07-20 06:48:08 +02:00
Elton Chung 77f04cebe8 * src/base/ftpatent.c (FT_Face_SetUnpatentedHinting): Fix typo. 2011-07-20 06:30:20 +02:00
Steven Chu b0962ac34e [truetype] Fix metrics on size request for scalable fonts.
* src/truetype/ttdriver.c (tt_size_request): Fix copying metrics
from TT_Size to FT_Size if scalable font.
2011-07-16 09:12:42 +02:00
Matthias Drochner 143799d4a9 [psaux] Fix potential sign extension problems.
When shifting right a signed value, it is not defined by the
C standard whether one gets a sign extension or not.  Use a macro to
do an explicit cast from a signed short (assuming that this is
16bit) to an int.

* src/psaux/t1decode.c (Fix2Int): New macro.
Use it where appropriate.
2011-07-14 07:35:51 +02:00
Werner Lemberg 60f8371353 * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
<op_callothersubr>: Better handling of subroutine index 0.
From Matthias Drochner <M.Drochner@fz-juelich.de>.
2011-07-14 07:34:12 +02:00
Werner Lemberg 403559b84a Sort case in switch statement numerically. 2011-07-14 07:21:11 +02:00
Алексей Подтележников dc33b4a155 [psaux] Optimize previous commit.
* src/psaux/t1decode.c (t1_decoder_parse_charstrings)
<op_callothersubr>: Move error check down to avoid testing twice for
good cases.
2011-07-10 07:08:51 +02:00
Werner Lemberg c46b1e2476 [psaux] Add better argument check for `callothersubr'.
* src/psaux/t1decode.c (t1_decoder_parse_charstrings)
<op_callothersubr>: Reject negative arguments.
2011-07-08 13:46:42 +02:00
Werner Lemberg f095744d2d [sfnt] Try harder to find non-zero values for ascender and descender.
* src/sfnt/sfobjs.c (sfnt_load_face): Consult `OS/2' table in case
the `hhea' table's values are zero.
2011-07-07 14:10:39 +02:00
Werner Lemberg ecdcad029f Typos. 2011-07-03 15:29:55 +02:00
Werner Lemberg f4b63326f1 Fix previous commit.
We want to unset FT_FACE_FLAG_SCALABLE only if there are bitmap
strikes in the font.

* src/truetype/ttobjs.c (tt_face_init): Implement it.

* docs/CHANGES: Updated.
2011-07-03 11:24:46 +02:00
Werner Lemberg b511999601 Whitespace. 2011-07-03 09:46:32 +02:00
Just Fill Bugs 07598339f7 Fix Savannah bug #33246.
* src/truetype/ttobjs.c (tt_check_single_notdef): New function.
(tt_face_init): Use it to test FT_FACE_FLAG_SCALABLE.
2011-07-02 18:41:36 +02:00
Werner Lemberg 9ae6c7c54d * docs/CHANGES: Updated. 2011-07-02 12:15:10 +02:00
David Bevan aecbfe1ba7 [ftstroke] Major revision.
The main problems
-----------------

  o If FT_STROKER_LINEJOIN_BEVEL was specified, unlimited miter
    joins (not bevel joins) were generated.  Indeed, the meanings of
    `miter' and `bevel' were incorrectly reversed (consistently) in
    both the code and comments.

  o The way bevel joins were constructed (whether specified
    explicitly, or created as a result of exceeding the miter limit)
    did not match what is required for stroked text in PostScript or
    PDF.

The main fixes
--------------

  o The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected.

  o A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has been
    introduced to support PostScript and PDF miter joins.

  o FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an
    alias for FT_STROKER_LINEJOIN_MITER.

Additionally, a variety of stroking errors have been fixed.  These
would cause various artifacts (including points `at infinity'),
especially when stroking poor quality fonts.

See

  http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00001.html

for example documents.  The FreeType stroker now produces results
very similar to that produced by GhostScript and Distiller for these
fonts.

Other problems
--------------

The following problems have been resolved:

  o Inside corners could be generated incorrectly.  Intersecting the
    inside corner could cause a missing triangular area and other
    effects.

    The intersection point can only be used if the join is between
    two lines and both lines are long enough.  The `optimization'
    condition in `ft_stroker_inside' has been corrected; this
    requires the line length to be passed into various functions and
    stored in `FT_StrokerRec'.

  o Incorrect cubic curves could be generated.  The angle
    calculations in `FT_Stroker_CubicTo' have been corrected to
    handle the case of the curve crossing the +/-PI direction.

  o If the border radius was greater than the radius of curvature of
    a curve, then the negative sector would end up outside (not
    inside) the border.  This situation is now recognized and the
    negative sector is circumnavigated in the opposite direction.
    (If round line joins are being used, this code is disabled
    because the line join will always cover the negative sector.)

  o When a curve is split, the arcs may not join smoothly (especially
    if the curve turns sharply back on itself).  Changes in
    direction between adjacent arcs were not handled.  A round
    corner is now added if the deviation from one arc to the next is
    greater than a suitable threshold.

  o The current direction wasn't retained if a the outline contained
    a zero length lineto or a curve that was determined to be
    `basically a point'.  This could cause a spurious join to be
    added.

  o Cubics with close control points could be mishandled.  All eight
    cases are now distinguished correctly.

Other improvements
------------------

o Borders for cubic curves could be too `flat'.
  FT_SMALL_CUBIC_THRESHOLD has been reduced a little to prevent
  this.

o The handling and use of movable points has been simplified a
  little.

o Various values are now computed only if the results are actually
  needed.

o The directions of the outer and inner borders have been swapped,
  as recommended by Graham Asher.

* src/base/ftstroke.c: Revised.
* include/freetype/ftstroke.h: Updated.
2011-07-02 12:09:52 +02:00
Werner Lemberg ee5d3b5947 * builds/toplevel.mk: We use git, not CVS, thus skip `.gitignore'. 2011-06-30 15:08:15 +02:00
Werner Lemberg 073986ec4a Minor doc fixes. 2011-06-30 06:20:30 +02:00
Werner Lemberg 54f187ab1a Document last commit. 2011-06-29 10:01:42 +02:00
Werner Lemberg 4bf221964c Improve documentation of FT_Get_Glyph_Name. 2011-06-29 09:45:51 +02:00
Werner Lemberg 96ddc679be Fix Savannah bug #33663.
* src/bdf/bdflib.c (_bdf_parse_glyphs): Handle negative values for
ENCODING correctly.
2011-06-29 09:15:54 +02:00
Werner Lemberg da9dbf89c8 * Version 2.4.5 released.
=========================

Tag sources with `VER-2-4-5'.

* docs/CHANGES: Updated.

* docs/VERSION.DLL: Update documentation and bump version number to
2.4.5

* README, Jamfile (RefDoc),
builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj,
builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
builds/win32/visualce/freetype.vcproj,
builds/win32/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.4.4/2.4.5/, s/244/245/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.

* builds/unix/configure.raw (version_info): Set to 13:0:7.
2011-06-25 07:16:22 +02:00
Werner Lemberg 3ae2c70dc6 Minor documentation fixes. 2011-06-24 13:18:41 +02:00
Werner Lemberg 397461947c Merge branch 'master' of git.sv.gnu.org:/srv/git/freetype/freetype2
Conflicts:
	ChangeLog
2011-06-20 19:20:50 +02:00
Werner Lemberg 4696dde23d * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Fix change
from 2011-05-04.
2011-06-20 19:09:02 +02:00
suzuki toshiya c7e8028f3f [gxvalid] make the `prop' validation tracing verbose.
* src/gxvalid/gxvprop.c: Add tracing messages for errors.
2011-06-19 23:00:11 +09:00
suzuki toshiya c63c6f7265 [autogen.sh] Reflect environment variable LIBTOOLIZE. 2011-06-19 22:54:40 +09:00
Werner Lemberg ea79b84621 Update license documentation.
* docs/GPL.TXT: Renamed to...
* docs/GPLv2.TXT: This.

* docs/LICENSE.TXT: Updated.
2011-06-18 08:06:57 +02:00
suzuki toshiya 41aa412591 Fix wrong indents in src/cache/ftcmru.c. 2011-06-15 20:02:49 +09:00
suzuki toshiya e62c876bb0 Fix g++4.6 compiler warnings in module drivers.
The background is same with previous commit.

* src/truetype/ttgxvar.c (ft_var_readpackedpoints):
Init `points'.  (TT_Vary_Get_Glyph_Deltas): Init
`delta_xy'.  (TT_Get_MM_Var): Init `mmvar'.
* src/type1/t1load.c (T1_Get_MM_Var): Ditto.
* src/cff/cffdrivr.c (cff_ps_get_font_info): Init
`font_info'.
* src/cff/cffload.c (cff_index_get_pointers): Init `t'.
(cff_font_load): Init `sub'.
* src/cff/cffobjs.c (cff_size_init): Init `internal'.
(cff_face_init): Init `cff'.
* src/pfr/pfrload.c (pfr_extra_item_load_stem_snaps):
Init `snaps'.
* src/pcf/pcfread.c (pcf_get_properties): Init `properties'.
(pcf_get_bitmaps): Init `offsets'.  (pcf_get_encodings):
Init `tmpEncoding'.
* src/sfnt/ttload.c (tt_face_load_gasp): Init `gaspranges'.
* src/sfnt/ttsbit.c (Load_SBit_Image): Init `components'.
* src/cache/ftcmru.c (FTC_MruList_New): Init `node'.
* src/gzip/ftgzip.c (FT_Stream_OpenGzip): Init `zip' and
`zip_buff'.
* src/lzw/ftlzw.c (FT_Stream_OpenLZW): Init `zip'.
* src/bzip2/ftbzip2.c (FT_Stream_OpenBzip2): Init `zip'.
2011-06-15 02:48:33 +09:00
suzuki toshiya dc185ee2c2 Fix misleading comment, s/buffer allocator/FT_NEW() families/g 2011-06-15 02:36:52 +09:00
suzuki toshiya 65a449887d [base] Fix g++4.6 compiler warnings in src/base/*.c.
Passing uninitialized pointer to the buffer allocator is
not problematic theoretically (as far as the returned
pointer is checked before writing), but g++4.6 dislikes
it and warns by -Wuninitialized.  Initialize them by NULL.

* src/base/ftobjs.c (FT_Stream_New): Init `stream'.
(new_memory_stream): Ditto.
(FT_New_GlyphSlot): Init `slot'.
(FT_CMap_New): Init `cmap'.
(open_face_PS_from_sfnt_stream): Init `sfnt_ps'.
(Mac_Read_POST_Resource): Init `pfb_data'.
(Mac_Read_sfnt_Resource): Init `sfnt_data'.
* src/base/ftrfork.c (FT_Raccess_Get_DataOffsets):
Init `offsets_internal' and `ref'.
(raccess_guess_darwin_hfsplus): Init `newpath'.
(raccess_guess_darwin_newvfs): Ditto.
* src/base/ftbitmap.c (ft_bitmap_assure_buffer):
Init `buffer'.
* src/base/ftstroke.c (FT_Stroker_New): Init `stroker'.
2011-06-15 01:44:24 +09:00