369d8be97f
`FDEF` instructions are specified as allowed only in 'prep' or 'fpgm'. FreeType has attempted to prevent their use in the glyph program, but they were still allowed in glyph programs if defined in a function defined in 'prep' or 'fpgm' and called from the glyph program. Similarly, `IDEF` instructions are specified not to be able to modify any existing instruction. FreeType has attempted to prevent their use in the glyph program, but they can still be used like `FDEF`. This change stores the initial bytecode range type and disallows the use of `FDEF` and `IDEF` while running the glyph program. Most other state is copied from the `TT_Size` into the execution context. However, it is possible for a glyph program to use `WS` to write to the storage area or `WCVTP`, `WCVTF`, and `DELTAC[123]` to write to the control value table. Allowing any change to the global state from the glyph program is problematic as the outlines of any given glyph may change based on the order the glyphs are loaded or even how many times they are loaded. There exist fonts that write to the storage area or the control value table in the glyph program, so their use should not be an error. Possible solutions to using these in the glyph program are * ignore the writes; * value-level copy on write, discard modified values when finished; * array-level copy on write, discard the copy when finished; * array-level copy up-front. Ignoring the writes may break otherwise good uses. A full copy up-front was implemented, but was quite heavy as even well behaved fonts required a full copy and the memory management that goes along with it. Value-level copy on write could use less memory but requires a great deal more record keeping and complexity. This change implements array-level copy on write. If any attempt is made to write to the control value table or the storage area when the initial bytecode range was in a glyph program, the relevant array will be copied to a designated storage area and the copy used for the rest of the glyph program's execution. * src/truetype/ttinterp.h (TT_ExecContextRec): New fields `iniRange`, `glyfCvtSize`, `glyfCvt`, `origCvt`, `glyfStoreSize`, `glyfStorage`, and `origStorage`. * src/truetype/ttinterp.c (Modify_CVT_Check): New function to handle `exc->glyfCvt`. (Write_CVT, Write_CVT_Stretched, Move_CVT, Move_CVT_Stretched): Use it. (Ins_WS): Handle `exc->glyfStorage`. (Ins_FDEF, Ins_IDEF): Updated. (TT_RunIns): Updated. (TT_Done_Context): Free 'glyf' CVT working and storage area. (TT_Load_Context): Fix/add casts. * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Fix cast. |
||
---|---|---|
builds | ||
devel | ||
docs | ||
include | ||
objs | ||
src | ||
subprojects | ||
.clang-format | ||
.gitattributes | ||
.gitignore | ||
.gitlab-ci.yml | ||
.gitmodules | ||
.mailmap | ||
autogen.sh | ||
ChangeLog | ||
CMakeLists.txt | ||
configure | ||
LICENSE.TXT | ||
Makefile | ||
meson_options.txt | ||
meson.build | ||
modules.cfg | ||
README | ||
README.git | ||
vms_make.com |
FreeType 2.10.4 =============== Homepage: https://www.freetype.org FreeType is a freely available software library to render fonts. It is written in C, designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output (glyph images) of most vector and bitmap font formats. Please read the `docs/CHANGES` file, it contains IMPORTANT INFORMATION. Read the files `docs/INSTALL*` for installation instructions; see the file `docs/LICENSE.TXT` for the available licenses. For using FreeType's git repository instead of a distribution bundle, please read file `README.git`. The FreeType 2 API reference is located in directory `docs/reference`; use the file `index.html` as the top entry point. [Please note that currently the search function for locally installed documentation doesn't work due to cross-site scripting issues.] Additional documentation is available as a separate package from our sites. Go to https://download.savannah.gnu.org/releases/freetype/ and download one of the following files. freetype-doc-2.10.4.tar.xz freetype-doc-2.10.4.tar.gz ftdoc2104.zip To view the documentation online, go to https://www.freetype.org/freetype2/docs/ Mailing Lists ------------- The preferred way of communication with the FreeType team is using e-mail lists. general use and discussion: freetype@nongnu.org engine internals, porting, etc.: freetype-devel@nongnu.org announcements: freetype-announce@nongnu.org git repository tracker: freetype-commit@nongnu.org The lists are moderated; see https://www.freetype.org/contact.html how to subscribe. Bugs ---- Please submit bug reports at https://gitlab.freedesktop.org/freetype/freetype/-/issues Alternatively, you might report bugs by e-mail to `freetype-devel@nongnu.org`. Don't forget to send a detailed explanation of the problem -- there is nothing worse than receiving a terse message that only says 'it doesn't work'. Patches ------- For larger changes please provide merge requests at https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests Alternatively, you can send patches to the `freetype-devel@nongnu.org` mailing list -- and thank you in advance for your work on improving FreeType! Details on the process can be found here: https://www.freetype.org/developer.html#patches Enjoy! The FreeType Team ---------------------------------------------------------------------- Copyright (C) 2006-2021 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, and distributed under the terms of the FreeType project license, LICENSE.TXT. By continuing to use, modify, or distribute this file you indicate that you have read the license and understand and accept it fully. --- end of README ---