summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* * src/sfnt/sfwoff2.c (compute_ULong_sum): Fix undefined shift.Werner Lemberg2019-09-031-4/+4
| | | | | | Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16933
* * src/sfnt/sfwoff2.c (woff2_open_font): Add sanity check.Werner Lemberg2019-09-011-1/+16
| | | | | | | | Don't trust `totalSfntSize' unconditionally. Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16893
* [woff2] Don't use `FT_UInt64' (#56815).Dominik Röttsches2019-08-271-1/+1
| | | | | | * src/sfnt/sfwoff2.c (woff2_open_font): Use `FT_UInt32' for `file_offset'. This fixes builds on platforms where `FT_LONG64' is not defined while still being sufficient to store a file offset.
* [truetype] Prevent crash in `TT_Set_Named_Instance' (#56813).Werner Lemberg2019-08-271-1/+4
| | | | | * src/truetype/ttgxvar.c (TT_Set_Named_Instance): Fix error handling.
* [woff2] Fix compiler warnings.Werner Lemberg2019-08-272-11/+8
| | | | | | | | | | | | | | * src/sfnt/sfwoff2.c (read_num_hmetrics): Remove unused argument `table_len'. Update caller. (triplet_decode, compute_bbox, store_loca, reconstruct_glyf): Make `i' variable unsigned. (reconstruct_glyph): Remove condition which is always false. (reconstruct_html): Removed unused argument `transformed_size'. Update caller. * src/sfnt/woff2tags.c (woff2_known_tags): Remove condition which is always false.
* [woff2] Formatting; some comments.Werner Lemberg2019-08-274-173/+275
|
* [woff2] Check whether known tag is in array bounds.Nikhil Ramakrishnan2019-08-272-2/+13
| | | | | | | | | If table tag is not 0x3f, we expect a value between 0 and 62. If this is not the case, exit with errors. * src/sfnt/sfwoff2/c: Check whether table tag makes sense. * src/sfnt/woff2tags.c: Return 0 if tag is out of bounds.
* [woff2] More formatting and documentation.Nikhil Ramakrishnan2019-08-271-47/+86
| | | | | | | * include/freetype/internal/wofftypes.h, src/sfnt/sfwoff2.c: Implement formatting changes suggested as https://lists.nongnu.org/archive/html/freetype-devel/2019-08/msg00052.html
* * src/sfnt/sfwoff2.c: Improve trace comments.Nikhil Ramakrishnan2019-08-271-101/+54
| | | | Adjust tracing levels for comments, and more formatting.
* [woff2] Formatting.Nikhil Ramakrishnan2019-08-272-191/+194
| | | | * src/sfnt/sfobjs.c, src/sfnt/sfwoff2.c: Better formatting.
* [woff2] Support `hmtx' reconstruction when `glyf' is untransformed.Nikhil Ramakrishnan2019-08-271-4/+89
| | | | | | | | | `reconstruct_hmtx' requires `info->x_mins' and `info->num_glyphs' to reconstruct the hmtx table. In case glyf is not transformed, we call `get_x_mins' which does the necessary work. * src/sfnt/sfwoff2.c (get_x_mins): New function. (reconstruct_font): Call get_x_mins.
* [sfnt] Support `face->num_faces' for WOFF2 fonts.Nikhil Ramakrishnan2019-08-273-11/+46
| | | | | | | | | | | | | | | | | | | | | | Set correct value of `face->num_faces' for WOFF2 fonts. This is being handled separately because we only load the tables for the requested font face in `woff2_open_font' and create a single-face sfnt stream. The full discussion is at: https://lists.gnu.org/archive/html/freetype-devel/2019-08/msg00000.html * src/sfnt/sfobjs.c (sfnt_open_font): Add parameter `woff2_num_faces'. (sfnt_init_face): Introduce variable `woff2_num_faces', and change `face->root.num_faces' if `woff2_num_faces' is set. * src/sfnt/sfwoff2.c (woff2_open_font): Validate requested face index and handle negative face indices. * src/sfnt/sfwoff2.h (woff2_open_font): Add parameter `num_faces' to declaration.
* [woff2] Improve memory and error handling.Nikhil Ramakrishnan2019-08-271-23/+61
| | | | | | | Free up memory after use, and improve error handling. * src/sfnt/sfwoff2.c (reconstruct_font, woff2_open_font): Implement changes.
* [woff2] Avoid too many calls to `FT_REALLOC'.Nikhil Ramakrishnan2019-08-271-35/+62
| | | | | | | | | | | | | | | | | | | | | | | We do this by using `totalSfntSize' as an initial reference, and extending the buffer when required. This reduces rendering time considerably. * include/freetype/internal/wofftypes.h (WOFF2_HeaderRec): Add `totalSfntSize', rename `total_sfnt_size' to `actual_sfnt_size'. * src/sfnt/sfwoff2.c (write_buf): Add parameter `dst_size' to keep track of and update total size of stream. (WRITE_SFNT_BUF, WRITE_SFNT_BUF_AT): Modify macros accordingly. (pad4, store_loca, reconstruct_glyf, reconstruct_hmtx, reconstruct_font): Update parameters to accept `sfnt_size'. (woff2_open_font): Add variable `sfnt_size'. Use WOFF2 header field `totalSfntSize' as initial reference (if value makes sense) and allocate `totalSfntSize' bytes for the sfnt stream. `write_buf' handles reallocation if and when required. Also resize the stream to `actual_sfnt_size' after reconstruction.
* [woff2] Reconstruct `loca', `hmtx', and swap out stream.Nikhil Ramakrishnan2019-08-273-73/+373
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add necessary functions to reconstruct loca and hmtx tables (the two remaining tables that can have a transform). `woff2_open_font' is now capable of loading a woff2 font face. This code may still need more refining and better memory management. * include/freetype/internal/wofftypes.h (WOFF2_HeaderRec): Add total (final) size of sfnt stream. (WOFF2_InfoRec): Add header checksum value. * src/sfnt/sfobjs.c (sfnt_open_font): Change `face_instance_index' parameter to its pointer so its value can be modified by `woff2_open_font'. * src/sfnt/sfwoff2.c: (WRITE_SFNT_BUF_AT): New macro to write into sfnt buffer at given position. (write_buf): Add parameter `extend_buf' which allows caller to specify whether buffer should be reallocated before copying data. (WRITE_SFNT_BUF): Updated. (pad4, store_loca, reconstruct_htmx): New functions. (reconstruct_glyf): Calculate loca values and store them. (reconstruct_font): Call `reconstruct_hmtx', write table record entries, and calculate table checksums. Also calculate font checksum and update `checksumAdjustment' entry in head table. (woff2_open_font): Open stream for sfnt buffer, swap out input stream and return. * src/sfnt/sfwoff2.h (woff2_open_font): Modify parameter to accept pointer to `face_index'.
* [woff2] Reconstruct transformed `glyf' table.Nikhil Ramakrishnan2019-08-273-48/+831
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reconstruct `glyf' table if it is transformed in the uncompressed table stream. Also add necessary structures, macros and functions. * include/freetype/internal/wofftypes.h (WOFF2_InfoRec, WOFF2_SubstreamRec, WOFF2_PointRec): New structures. (WOFF2_TableRec): s/OrigLength/dst_length/. * src/sfnt/sfwoff2.c (READ_255USHORT, READ_BASE128): Use `FT_SET_ERROR' to set implicit `error' variable. (WRITE_SHORT): New macro. (N_CONTOUR_STREAM, N_POINTS_STREAM, FLAG_STREAM, GLYPH_STREAM, COMPOSITE_STREAM, BBOX_STREAM, INSTRUCTION_STREAM): New macros to refer to substreams of the transformed `glyf' tables. (Read255UShort, ReadBase128): Return errors set by `FT_READ_XXX' macros. (with_sign, safe_int_addition): New functions to add sign to values based on a flag and perform safe addition respectively. (triplet_decode): Decode variable-length (flag, xCoordinate, yCoordinate) triplet for a simple glyph. See https://www.w3.org/TR/WOFF2/#triplet_decoding (store_points, compute_bbox, composteGlyph_size, reconstruct_glyf): New functions. (reconstruct_font): Call `reconstruct_glyf'. * src/sfnt/sfwoff2.h: Add required constants. * src/sfnt/woff2tags.h: Move out constants to `sfwoff2.h'.
* [woff2] Copy un-transformed tables to sfnt stream.Nikhil Ramakrishnan2019-08-272-7/+96
| | | | | | | | | | | | | | | | | Copy un-transformed tables to the sfnt stream. * src/sfnt/sfwoff2.c: (WRITE_SFNT_BUF): New macro. (write_buf): New function. Extend memory of `dst' buffer and copy bytes from `src'. (compute_ULong_sum): New function. Calculate checksum of table. (reconstruct_font): Change `FT_Byte* sfnt' to `FT_Byte** sfnt_bytes'. This has been done because we reallocate memory to `sfnt' multiple times, which may change the pointer value of `sfnt'. This new pointer must be propogated back to the caller. Same reason for using a double pointer in `write_buf'. * src/sfnt/woff2tags.h (WOFF2_DEFAULT_MAX_SIZE): New macro used for overflow checking.
* [woff2] Create stream for uncompressed buffer.Nikhil Ramakrishnan2019-08-271-8/+141
| | | | | | | | | | | Uncompressed buffer is now an `FT_Stream'. Perform basic checks and start iterating over tables. * src/sfnt/sfwoff2.c (stream_close, find_table, read_num_hmetrics): New functions. (reconstruct_font): Modify parameters and iterate over tables. (woff2_open_font): Updated.
* [woff2] Handle TTCs and start reconstructing font.Nikhil Ramakrishnan2019-08-271-14/+63
| | | | | | | | | | We `handle' TTCs by modifying the `indices' array to point to only those tables that are part of the requested `face_index'. Set and use `num_tables' in `WOFF2_TtcFont'. * src/sfnt/sfwoff2.c (reconstruct_font): New function. (woff2_open_font): Start reconstruction of font.
* [woff2] Get known tags from function.Nikhil Ramakrishnan2019-08-273-70/+79
| | | | | | | | | | | | | | Change `KnownTags' to a function (`woff2_known_tags'). This avoids introducing a global constant array. This function returns the specified index without *any* checks. The caller must ensure that `index' is within array limits. * src/sfnt/sfwoff2.c (woff2_open_font): Change `KnownTags[...]' notation to `woff2_known_tags( ... )'. * src/sfnt/woff2tags.c: Perform changes. * src/sfnt/woff2tags.h: Update definitions.
* [woff2] Minor.Nikhil Ramakrishnan2019-08-271-2/+5
| | | | | * src/sfnt/sfwoff2.c (woff2_uncompress): Add error message (woff2_open_font): Free `uncompressed_buf'.
* [woff2] Uncompress Brotli streams and `face_index' support.Nikhil Ramakrishnan2019-08-273-11/+73
| | | | | | | | | | | | | | | | | | | | WOFF2 compressed stream is now uncompressed if Brotli is available. This data is stored in a separate buffer (uncompressed_buf) because it does not contain direct table data. Certain tables have transformations applied to them, and they must be reconstructed before we can write those tables to the SFNT stream. `face_index' is now being passed as a parameter to `woff2_open_font'. * src/sfnt/sfobjs.c (sfnt_open_font): Add parameter `face_instance_index'. * src/sfnt/sfwoff2.c (woff2_uncompress): New function. (woff2_open_font): Call `woff2_uncompress'. (compute_first_table_offset): Fix return type. * src/sfnt/sfwoff2.h (woff2_open_font): Modify declaration.
* [woff2] Write SFNT Offset table.Nikhil Ramakrishnan2019-08-271-1/+121
| | | | | | * src/sfnt/sfwoff2.c (WRITE_USHORT, WRITE_ULONG): New macros. (compare_tags): New function. (woff2_open_font): Implement it.
* * src/sfnt/sfwoff2.c: #undef macros.Nikhil Ramakrishnan2019-08-271-1/+6
|
* [woff2] Read table and collection directory.Nikhil Ramakrishnan2019-08-271-20/+307
| | | | | | | | | | | | | | * include/freetype/internal/wofftypes.h (WOFF2_TtcFontRec): New structure. (WOFF2_HeaderRec): Add more fields. * src/sfnt/sfwoff2.c (READ_255USHORT, READ_BASE128, ROUND4): New macros. (Read255UShort, CollectionHeaderSize, compute_first_table_offset): New functions. (ReadBase128): Use `FT_READ_BYTE'. (woff2_open_font): Add functionality to read table directory and collection directory (if present).
* [sfnt] Include `woff2tags.c' for building.Nikhil Ramakrishnan2019-08-272-1/+3
| | | | | | * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `woff2tags.c'. * src/sfnt/sfnt.c: Include `woff2tags.c'.
* [sfnt] Add WOFF2 constants.Nikhil Ramakrishnan2019-08-272-0/+134
| | | | | | | | | | | Add constants required for WOFF2, and known table tags as defined in the specification. See https://www.w3.org/TR/WOFF2/#table_dir_format for details. * src/sfnt/woff2tags.c, src/sfnt/woff2tags.h: New files.
* [sfnt] Read WOFF 2 header.Nikhil Ramakrishnan2019-08-275-0/+229
| | | | | | | | | | | | | | | | Check for WOFF2 tag, call `woff2_open_font', and implement it to read header according to specification. * include/freetype/internal/fttrace.h: Add `sfwoff2.c'. * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `sfwoff2.c'. * src/sfnt/sfnt.c: Include `sfwoff2.c'. * src/sfnt/sfobjs.c (sfnt_open_font): Check for `wOF2' tag and call `woff2_open_font'. * src/sfnt/sfwoff2.c, src/sfnt/sfwoff2.h: New files.
* * src/psaux/cffdecode.c (cff_operator_seac): Fix numeric overflow.Werner Lemberg2019-08-261-1/+1
| | | | | | Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16470
* [type1] Fix `FT_Get_Var_Axis_Flags' (#56804).Werner Lemberg2019-08-262-10/+34
| | | | | * src/type1/t1load.c (T1_Get_MM_Var): Allocate space for axis flags. Also remove redundant assignment.
* * src/base/ftbbox.c (cubic_peak): Sanitize left shift (#56586).Alexei Podtelezhnikov2019-07-231-4/+4
|
* * src/cid/cidload.c (cid_hex_to_binary): Fix typo (#56653).Weiyi Wu2019-07-221-1/+1
|
* [sfnt, winfonts] Avoid memory leaks in case of error (#56587).Werner Lemberg2019-07-122-4/+12
| | | | | | | * src/sfnt/sfwoff.c (woff_open_font): Call `FT_FRAME_EXIT' in case of error. * src/winfonts/winfnt.c (fnt_face_get_dll_font): Ditto.
* Properly handle phantom points for variation fonts (#56601).Ben Wagner2019-07-121-6/+21
| | | | | * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Scale phantom points if HVAR and/or VVAR is present.
* [psaux] (2/2) Handle fonts that use SEAC for ligatures (#56580).Werner Lemberg2019-07-041-6/+15
| | | | | | The same as previous commit but for the old engine. * src/psaux/t1decode.c (t1operator_seac): Implement it.
* [psaux] (1/2) Handle fonts that use SEAC for ligatures (#56580).Chris Liddell2019-07-041-6/+16
| | | | | | | | | | | | | | | | | | | As originally intended, a Type 1 SEAC charstring would be used for an accented glyph (like `acaron' or `uumlaut'), where the advance width of the SEAC glyph is the same as that of the `base' glyph (like `a' or `u'). In this case it is not uncommon for the SEAC glyph to not use an (H)SBW opcode of its own but to rely on the value from the base glyph. However, out-of-spec fonts also use SEAC glyphs for ligatures (like `oe' or `fi'), and in those cases the overall advance width is greater than that of the `base' glyph. For this reason we have to allow that the SEAC glyph can have an (H)SBW value of its own, and if it has, retain this value, rather than the one from the base glyph. * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_escSEAC>: Implement it.
* * Version 2.10.1 released.VER-2-10-1Werner Lemberg2019-07-012-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | ========================== Tag sources with `VER-2-10-1'. * docs/VERSION.TXT: Add entry for version 2.10.1. * README, Jamfile (RefDoc), src/base/ftver.rc, builds/windows/vc2010/freetype.vcxproj, builds/windows/vc2010/index.html, builds/windows/visualc/freetype.dsp, builds/windows/visualc/freetype.vcproj, builds/windows/visualc/index.html, builds/windows/visualce/freetype.dsp, builds/windows/visualce/freetype.vcproj, builds/windows/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.10.0/2.10.1/, s/2100/2101/. * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1. * builds/unix/configure.raw (version_info): Set to 23:1:17. * CMakeLists.txt (VERSION_PATCH): Set to 1. * include/freetype/fterrors.h (FT_Error_String): Fix C++ compilation.
* * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Fix inequality.Alexei Podtelezhnikov2019-06-261-2/+2
| | | | Reported by Armin Hasitzka.
* * src/tools/apinames.c: Formatting, minor edits.Werner Lemberg2019-06-161-204/+237
|
* [autofit] Disable hinting if no blue zones are available (#56450).Werner Lemberg2019-06-162-7/+50
| | | | | | | | | | | | * src/autofit/afglobal.c (af_face_global_get_metrics): Start again (with dummy hinter module) if no blue zones are present. * src/autofit/aflatin.c (af_latin_metrics_init_blues): Change signature to return error code. If no blue zones are found, update `glyph_styles' array to hold AF_STYLE_NONE_DFLT instead of the current style. (af_latin_metrics_init): Return internal error code if no blue zones are found.
* * src/autofit/aflatin.c (af_latin_metrics_init_widths): Minor.Werner Lemberg2019-06-131-0/+4
|
* [smooth] Restore the span buffering for direct mode only.Alexei Podtelezhnikov2019-06-131-6/+25
| | | | | | | | | | | | The buffer size FT_MAX_GRAY_SPANS is set to 10 spans, which should be enough to cover the entire scanline for simple glyphs in most cases: each slightly slanted edge needs up to two spans, plus a filling span in-between. This is not new, we used to do it before cb4388783cecc. * src/smooth/ftgrays.c (gray_TWorker): Add `spans' and `num_spans'. (gray_hline, gray_sweep): Implement the span buffering. (gray_raster_render): Use negative `num_spans' to avoid the direct mode.
* Rendering considerations.Alexei Podtelezhnikov2019-06-121-0/+5
|
* * src/truetype/ttobjs.c (tt_check_trickyness_family): Add `const'.Alexei Podtelezhnikov2019-06-111-1/+1
|
* [gzip] Add support for `gzip' encoded header (#9812).Moazin Khatti2019-06-111-1/+1
|
* [type1,type42] Use `const' for string literals.Alexei Podtelezhnikov2019-06-106-47/+33
| | | | | | | | | | | * include/freetype/internal/psaux.h (PS_Table_FuncsRec): Updated. * include/freetype/internal/t1types.h (T1_EncodingRec): Updated. * src/psaux/psobjs.[ch] (ps_table_add): Updated. * src/type1/t1load.c (T1_Open_Face, parse_encoding): Updated. * src/type42/t42objs.c (T42_Open_Face): Updated. * src/type42/t42parse.c (t42_parse_encoding): Updated. * src/cff/cffobjs.c (cff_face_init): Minor.
* [bdf,pcf] Use `const' for string literals.Alexei Podtelezhnikov2019-06-104-135/+135
| | | | | | | | * src/bdf/bdf.h (bdf_property_t): Updated `name'. * src/bdf/bdflib.c (_bdf_list_split,bdf_create_property, _bdf_add_property,_bdf_ato*): Updated. * src/bdf/bdfdrivr.c (bdf_interpret_style): Updated. * src/pcf/pcfread.c (pcf_intrpret_style): Ditto.
* * src/base/ftinit.c (FT_Set_Default_Properties): Fix crash.Philip Race2019-06-071-0/+3
| | | | Terminate loop at end of environment.
* [sfnt] Separate WOFF sources and headers.Nikhil Ramakrishnan2019-05-305-398/+478
| | | | | | | | | | | | | | | | | | | | | | Move WOFF sources and headers to separate files. * include/freetype/internal/wofftypes.h, src/sfnt/sfwoff.c, src/sfnt/sfwoff.h: New files. * include/freetype/internal/fttrace.h: Register `sfwoff.c'. * include/freetype/internal/internal.h: Define FT_INTERNAL_WOFF_TYPES_H. * include/freetype/internal/sfnt.h: Include FT_INTERNAL_WOFF_TYPES_H. * include/freetype/internal/tttypes.h: Move out WOFF structures. * src/sfnt/rules.mk: Add `sfwoff.c'. * src/sfnt/sfnt.c: Include `sfwoff.c'. * src/sfnt/sfobjs.c: Include `sfwoff.h', move out WOFF sources.
* [base] Fix `make multi'.Werner Lemberg2019-05-301-0/+1
| | | | | | Reported by Nikhil. * src/base/fterrors.c: Include FT_INTERNAL_DEBUG_H.