)]}'
{
  "log": [
    {
      "commit": "d333439633039de426f943f28a2926c7f97b5ae5",
      "tree": "3ca4b3a254055bdfb267a83bb3b59b0fa4da8f8d",
      "parents": [
        "e3528ca2daf0653eacdfb28429b242b1e7bc2c2c"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Sep 22 10:00:00 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Sep 22 10:00:00 2026 +0200"
      },
      "message": "* src/autofit/afranges.c: Updated to Unicode 18.0.\n\nBut no support for new scripts (volunteers welcomed).\n"
    },
    {
      "commit": "e3528ca2daf0653eacdfb28429b242b1e7bc2c2c",
      "tree": "e01d10efe4b3ca3b5c897b0d1d4454946b53a06c",
      "parents": [
        "032c3c5c80a8fc2aad8258a13526dfcbcc0d8dce"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Mon Sep 21 10:39:51 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Sep 22 08:27:56 2026 +0200"
      },
      "message": "* src/autofit/hb-script-list.h: Update file to HarfBuzz version 14.5.0.\n\nCarries Unicode 18 scripts.\n"
    },
    {
      "commit": "032c3c5c80a8fc2aad8258a13526dfcbcc0d8dce",
      "tree": "5d9beb1f0415253092c19a5f8943cbe935523833",
      "parents": [
        "d4d69f8e68bdef6f01faf28a5360bda51eb6dd1b"
      ],
      "author": {
        "name": "Mrmaxmeier",
        "email": "Mrmaxmeier@gmail.com",
        "time": "Mon Sep 21 15:47:51 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 21 17:28:44 2026 +0200"
      },
      "message": "[truetype] Fix dangling `blend` pointer after failed \u0027gvar\u0027 setup.\n\nSince commit a69e39ad9, `ft_var_load_gvar` creates a private blend for\nfonts with \u0027gvar\u0027 but no \u0027fvar\u0027 (VARC static component axes) and calls\n`tt_done_blend` if loading fails afterwards.  That function freed the\nblend but left `face-\u003eblend` pointing to it while the face stays alive,\ncausing a heap use-after-free on the next access.\n\nReported as\n\n  https://issues.oss-fuzz.com/issues/564162766\n\n* src/truetype/ttgxvar.c (tt_done_blend): Reset `face-\u003eblend`.\n\n* src/truetype/ttobjs.c (tt_face_done): Remove now-redundant reset.\n\nAssisted-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "d4d69f8e68bdef6f01faf28a5360bda51eb6dd1b",
      "tree": "0d23d90bef624488cade02fa790de0c412af90d9",
      "parents": [
        "a98c7c223ab274767f41467fe57795d86f60eedc"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Sep 20 22:41:35 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Sep 20 22:41:35 2026 -0400"
      },
      "message": "* src/base/ftbbox.c (cubic_peak): Make 64-bit friendly and use ULABS.\n"
    },
    {
      "commit": "a98c7c223ab274767f41467fe57795d86f60eedc",
      "tree": "7cad8c1ce27bfc2ddb4d1bdb103dc5d4502961e9",
      "parents": [
        "a69e39ad9ed44818ca316683f6984d25b2a7492b"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Sep 20 18:40:21 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Sep 20 18:40:21 2026 -0400"
      },
      "message": "[base] More overflow protections.\n\nFT_ABS() can overflow for INT_MIN and LONG_MIN, reported as\n  https://issues.chromium.org/issues/563962723\n\nWe introduce and use ULABS() nd UABS() to avoid that.\n\n* include/freetype/internal/ftcalc.h: Add ULABS and UABS.\n* src/base/ftcalc.c (FT_Matrix_Check, ft_corner_orientation): Updated.\n"
    },
    {
      "commit": "a69e39ad9ed44818ca316683f6984d25b2a7492b",
      "tree": "386da4efe7f48d876afee8021e47f0d65f653571",
      "parents": [
        "c7b5673f3d4968560a4f8c6fa4f5860132946219"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Mon Sep 14 22:08:01 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri Sep 18 17:07:35 2026 +0200"
      },
      "message": "[varc] Support static component axes.\n\nThe VARC draft permits static fonts without a \u0027fvar\u0027 table to retain \u0027gvar\u0027\nor \u0027CFF2\u0027 variation data for component-internal coordinates.  Initialize a\nprivate blend from the relevant variation store without exposing those axes\nthrough the public MM API.\n\nAlso add TrueType and CFF2 regression fonts.\n\n* src/truetype/ttvarc.c (tt_face_init_varc_axes): New function.\n  (tt_face_load_varc_glyph): Handle static VARC fonts.\n* src/tyuetype/ttvarc.h: Updated.\n\n* src/cff/cffdrivr.c (cff_varc_init_axes): New function.\n  (cff_varc_load_glyph): Use it.\n  (cff_service_varc): Updated.\n\n* src/truetype/ttgxvar.c (ft_var_load_gvar, TT_Get_MM_Var): Handle static\n  VARC fonts.\n  (tt_var_init_gvar, tt_var_init_blend): New functions.\n  (tt_done_blend): Updated.\n* src/truetype/ttgxvar.h: Updated.\n* src/truetype/ttdriver.c (tt_service_varc): Updated.\n\n* include/freetype/internal/services/svvarc.h (FT_VARC_Init_Axes_Func): New\n  typedef.\n  (FT_ServiceVARC): Updated.\n\n* tests/data/varc-static-gvar.ttf, tests/data/varc-static-cff2.otf: New test\n  fonts.\n* tests/varc/main.c: Updated.\n"
    },
    {
      "commit": "c7b5673f3d4968560a4f8c6fa4f5860132946219",
      "tree": "6ceb00ad6f53ed6f7e1d43371b1da7693e98e22a",
      "parents": [
        "891f904e2e7b4289f615598cd4b69832f87d2f3a"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Mon Sep 14 22:07:34 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri Sep 18 16:44:28 2026 +0200"
      },
      "message": "[tests] Add VARC test framework.\n\n* src/test/VARC/main.c: New file.\n* meson.build: Updated.\n"
    },
    {
      "commit": "891f904e2e7b4289f615598cd4b69832f87d2f3a",
      "tree": "827919ae864cd7e890d106d85a3a8b08bf560f79",
      "parents": [
        "4eb88c03b7bcf00525c0116e944151fa2fc5b594"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri Sep 18 16:06:48 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri Sep 18 16:08:27 2026 +0200"
      },
      "message": "[gzip] Apply security fix for CVE-2026-27171.\n\nThis is probably completely unnecessary, but it doesn\u0027t hurt.\n\nTaken from\n\n  https://github.com/madler/zlib/commit/ba829a458576d1ff0f26fc7230c6de816d1f6a77\n\nFixes issue #1468.\n"
    },
    {
      "commit": "4eb88c03b7bcf00525c0116e944151fa2fc5b594",
      "tree": "f24d3e0bec63f852d95109ad4eeb32d6dbd32dd0",
      "parents": [
        "f4e40ad03e4e17cf042ae6728d655e1dedd8af76"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Sep 17 17:39:19 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri Sep 18 16:01:37 2026 +0200"
      },
      "message": "src/gzip/README.freetype: Updated.\n"
    },
    {
      "commit": "f4e40ad03e4e17cf042ae6728d655e1dedd8af76",
      "tree": "18ef253f5731c38f36ab2dc863949277fd97191a",
      "parents": [
        "6f5bcbbad52e111296bff1bf115c4504d31f3cef"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu Sep 17 15:27:52 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu Sep 17 15:27:52 2026 -0400"
      },
      "message": "* src/base/ftobjs.c (FT_Set_Matrix): Validate matrix.\n\nThis should fix #1465."
    },
    {
      "commit": "6f5bcbbad52e111296bff1bf115c4504d31f3cef",
      "tree": "f06490559c4c5ec23c11a84de00f9031ff559b6c",
      "parents": [
        "342e5809b1aa8aed02b9be1df0015fa7e1e0e244"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Sep 15 05:18:53 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Sep 15 05:18:53 2026 +0200"
      },
      "message": "* src/truetype/ttvarc.c (tt_face_load_varc): Fix boundary check.\n\nFixes issue #1467.\n"
    },
    {
      "commit": "342e5809b1aa8aed02b9be1df0015fa7e1e0e244",
      "tree": "a9969891f86d67cfa3fe6b7b583d1f4953957b9c",
      "parents": [
        "5c79d6cd1ac73d70a55f3d963fb568aa32f6d794"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 14 12:27:09 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 14 12:27:09 2026 +0200"
      },
      "message": "* src/cff/cffload.c (cff_index_get_name): Avoid non-null `memcpy` argument.\n\nFixes issue #1466.\n"
    },
    {
      "commit": "5c79d6cd1ac73d70a55f3d963fb568aa32f6d794",
      "tree": "9d2a152ca6aa497f20cfb7fed2dfc2f754fbe9d4",
      "parents": [
        "f3ca71c9900fe860849b3163a6e2c1e765b291d9"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Sep 07 22:47:41 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Sep 07 22:47:41 2026 -0400"
      },
      "message": "* src/base/ftstroke.c (FT_Stroker_EndSubPath): Handle an empty subpath.\n(FT_Stroker_ParseOutline): Updated.\n\nThe relocates the check for an empty subpath. Fixes #1459."
    },
    {
      "commit": "f3ca71c9900fe860849b3163a6e2c1e765b291d9",
      "tree": "72b3d35d45ccf7df55cb0b8e117065d29e15f8da",
      "parents": [
        "a5a62a4df41b421dff2f9a9fe9b48b9226cc18ee"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Sep 07 15:02:23 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Sep 07 15:02:23 2026 -0400"
      },
      "message": "* src/cid/cidload.c (cid_read_subrs): Limit overlaps.\n\nOverlaps between subroutine dictionaries can be useful but prone to\nabuses. The arbitrary limit can be adjusted in the future. Fixes #1457.\n"
    },
    {
      "commit": "a5a62a4df41b421dff2f9a9fe9b48b9226cc18ee",
      "tree": "e83156d9b08cbc22e9ab5947e9480e9e037d6da7",
      "parents": [
        "668bd9bdcb059405a9ea5394a361058adfba25fb"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 20:43:19 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 20:43:19 2026 +0200"
      },
      "message": "docs/CHANGES: Updated.\n"
    },
    {
      "commit": "668bd9bdcb059405a9ea5394a361058adfba25fb",
      "tree": "4a260bd6a794bfea214df87379f6e0fc21603f26",
      "parents": [
        "50ef5a72980e3afafa7f84d563e63ef65d3800de"
      ],
      "author": {
        "name": "Infinality",
        "email": "infinality@infinality.net",
        "time": "Mon Sep 07 08:32:58 2026 -0500"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 20:35:06 2026 +0200"
      },
      "message": "[truetype] Adjust composite X rounding for native ClearType.\n\nFor composite glyphs using `ROUND_XY_TO_GRID`, v40 currently rounds the\ncomponent X offset to the full pixel grid when backward compatibility is\ndisabled.\n\nNative ClearType instead uses a 1/16-pixel grid in the ClearType direction.\nAs with native ClearType instruction rounding in v40, explicitly\nimplementing this finer grid is unnecessary here: leaving component\nX offsets unrounded gives visually equivalent results in the tested fonts\nwhile keeping the implementation simpler.\n\nRetain existing behavior for backward-compatible ClearType, monochrome\nrendering, tricky fonts, and other interpreter versions.\n\nThis corrects composite diacritic placement in fonts such as \u0027Corbel\u0027, where\nfull-pixel X rounding can visibly misplace accents at several ppem sizes.\n\n* src/truetype/ttgload.c (TT_Process_Composite_Component)\n  [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: Adjust conditions for rounding `x`.\n"
    },
    {
      "commit": "50ef5a72980e3afafa7f84d563e63ef65d3800de",
      "tree": "f3678dabf7bbc77f6c7fd198d2918672b01a52d5",
      "parents": [
        "a3cb5858f9f3e7fa361e2828312d9145d10ac025"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 12:13:07 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 12:13:07 2026 +0200"
      },
      "message": "[autofit] Avoid pointer wrap-around on 32-bit platforms.\n\n* src/autofit/afgsub.c (af_validate_lookup_table): Check size of extension\n  offset for lookup type 7 before adding it to the `subtable` pointer.\n\nFixes issue #1463.\n"
    },
    {
      "commit": "a3cb5858f9f3e7fa361e2828312d9145d10ac025",
      "tree": "732aceabceb1b231884d21f174a69aa9f3d2f723",
      "parents": [
        "e86492e2790a542cbea1295823ea0cb0c4927555"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 09:39:51 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 09:39:51 2026 +0200"
      },
      "message": "[winfonts] Avoid endless loop.\n\n* src/winfonts/winfnt.c (fnt_face_get_dll_font): Ensure that the sum of\n  `number_of_id_entries` and `number_of_named_entries` doesn\u0027t overflow.\n\nFixes issue #1462.\n"
    },
    {
      "commit": "e86492e2790a542cbea1295823ea0cb0c4927555",
      "tree": "22739a40a109419ca7f82288c2b085b7caa744ba",
      "parents": [
        "e8c8c6477c78c6fb22d0022ce9e1febee9860051"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 09:00:47 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 09:00:47 2026 +0200"
      },
      "message": "[pfr] Avoid heap over-read.\n\n* src/pfr/pfrobjc.s (pfr_face_get_kerning): While preparing the binary\n  search for kerning pairs, adjust `base` to current kerning item, not to\n  the next one.\n\nFixes issue #1461.\n"
    },
    {
      "commit": "e8c8c6477c78c6fb22d0022ce9e1febee9860051",
      "tree": "f38aa21a65144d798821a4554da39cb21afd4da6",
      "parents": [
        "4a1d62e2e1259bae709294e6ef95211375ab3fd8"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 05:59:02 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Sep 07 06:02:29 2026 +0200"
      },
      "message": "* src/otvalid/otvmath.c (otv_MathKern_validate): Fix limit check.\n\nFixes issue #1460.\n"
    },
    {
      "commit": "4a1d62e2e1259bae709294e6ef95211375ab3fd8",
      "tree": "dbbaa3de73feec60ff08fc637932417979eac26b",
      "parents": [
        "bfa7cd237fcffd9a001da73e4445f69c2aa5a8fb"
      ],
      "author": {
        "name": "Infinality",
        "email": "infinality@infinality.net",
        "time": "Sat Sep 05 08:56:05 2026 -0500"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sun Sep 06 15:28:37 2026 +0200"
      },
      "message": "[truetype] Adjust `ROUND` bytecode instruction for native ClearType.\n\nMicrosoft ClearType applies `ROUND[]` to the 1/16-pixel virtual grid in the\nClearType direction.  As with the rounded point-positioning instructions,\napproximate this in v40 by leaving the result unrounded during native\nClearType horizontal execution.\n\nThis fixes horizontal positioning like those performed by \u0027Malgun Gothic\u0027s\ncomposite glyph programs.  In particular, it corrects diacritic placement in\nglyphs such as \u0027Ÿ\u0027 and \u0027ü\u0027 and produces small improvements in several other\naccented glyphs.\n\nOther rendering modes and directions retain the existing `ROUND[]` behavior.\n\n* src/truetype/ttinterp.c (Ins_ROUND) [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]:\n  Handle it.\n"
    },
    {
      "commit": "bfa7cd237fcffd9a001da73e4445f69c2aa5a8fb",
      "tree": "2a9c6d6b6c050af36edbd5c05d2766652e77a6c7",
      "parents": [
        "d443c9ddfb4af997aeb028f8a5cee7d1f94b658d"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Sat Sep 05 20:26:14 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sun Sep 06 12:12:23 2026 +0200"
      },
      "message": "[ttvarc] Fix leak on malformed variation indices.\n\nReported as\n\n  https://issues.oss-fuzz.com/issues/554721572\n\n* src/truetype/ttvarc.c (tt_varc_parse_component): Route variation-index\n  parse failures through the common cleanup path so heap-allocated component\n  axis values are released.\n"
    },
    {
      "commit": "d443c9ddfb4af997aeb028f8a5cee7d1f94b658d",
      "tree": "eac4dc72f7dbee1afad61219a372802f0f3e3d9c",
      "parents": [
        "62107b369c6f4063af838391efa170d78823c223"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat Sep 05 21:00:54 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat Sep 05 21:00:54 2026 -0400"
      },
      "message": "* src/truetype/ttinterp.c (Compute_Funcs): Loosen orthogonality.\n\nNear-orthogonal freedom and projection vectors can produce huge\nmovements, which FreeType soppresses. What is near-orthogonal is\nnot defined in teh specifications.  The empirical limit is tuned\nto avoid the rendering artifacts in Palatino. Fixes #999.\n\nThanks to Werner and Infinality for the analysis of the problem.\n"
    },
    {
      "commit": "62107b369c6f4063af838391efa170d78823c223",
      "tree": "b1abec5b3b22142967bf3709c3ed74c8bd85c48d",
      "parents": [
        "3db2c32d6ef2a3ac94d61585b65417ec7bf454e1"
      ],
      "author": {
        "name": "Infinality",
        "email": "infinality@infinality.net",
        "time": "Tue Sep 01 07:41:43 2026 -0500"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Sep 05 15:05:52 2026 +0200"
      },
      "message": "[truetype] Improve native ClearType horizontal point hinting.\n\nFreeType\u0027s v40 interpreter normally approximates ClearType\u0027s increased\nhorizontal resolution by suppressing X-axis instruction effects in\nbackward-compatible mode.  Fonts can disable those compatibility\nrestrictions with INSTCTRL selector 3 and request native ClearType\nexecution.\n\nIn native mode, however, rounded point-positioning instructions currently\nuse the normal pixel grid.  Microsoft ClearType instead uses a virtual grid\nwith 16 positions per pixel in the ClearType direction.  Explicitly\nimplementing this finer grid is unnecessary for v40: leaving the affected\nnative horizontal distances unrounded gives visually equivalent results in\nthe tested fonts while keeping the implementation considerably simpler.\n\nPreserve native horizontal point movements, but suppress rounding for the\nrounded forms of MDAP, MIAP, MDRP, and MIRP when both the projection and\nfreedom vectors are horizontal.\n\nApply the related native ClearType graphics-state adjustments documented by\nMicrosoft: reduce CVT cut-in to 1/16 and minimum distance to 1/2 in the\nClearType direction.\n\nThese changes correct distorted horizontal geometry in the fonts \u0027Corbel\u0027\nand \u0027Malgun Gothic\u0027, and \u0027Constantia\u0027 while retaining the X movements\nrequired by \u0027SimSun\u0027.  The minimum-distance adjustment also corrects overly\nheavy diagonal strokes in \u0027Malgun Gothic M\u0027 and \u0027N\u0027 around 16–17 ppem.  The\nCVT cut-in adjustment produces smaller but visible differences, for example\nin \u0027Malgun Gothic V\u0027.\n\nMonochrome rendering, tricky fonts, vertical execution, and pre-program\nrounding retain their existing behavior.\n\nFixes issue #1454.\n\n* src/truetype/ttinterp.c (Update_Native_ClearType_X_State)\n  [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: New function.\n  (Compute_Funcs, Ins_INSTCTRL) [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: Use\n  it.\n  (Ins_MDAP, Ins_MIAP, Ins_MDRP, Ins_MIRP)\n  [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: Updated.\n\n* src/truetype/ttinterp.h (TT_ExecContextRec)\n  [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: New field `native_cleartype_x`.\n"
    },
    {
      "commit": "3db2c32d6ef2a3ac94d61585b65417ec7bf454e1",
      "tree": "b7d57a09221f1bfcc5049cab6368f0b7b105975f",
      "parents": [
        "b76738eff2f3846721f76f023cbb471396932669"
      ],
      "author": {
        "name": "Infinality",
        "email": "infinality@infinality.net",
        "time": "Mon Aug 31 09:17:49 2026 -0500"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Sep 01 05:50:21 2026 +0200"
      },
      "message": "[truetype] Honor ClearType \u0027gasp\u0027 smoothing and grid-fit policy.\n\nFreeType currently reports symmetric smoothing through GETINFO bit 18\nwithout distinguishing ClearType symmetric smoothing from symmetric grid\nfitting.\n\nResolve these two properties independently.  For version-1 \u0027gasp\u0027 tables,\nuse `FT_GASP_SYMMETRIC_SMOOTHING` and `FT_GASP_SYMMETRIC_GRIDFIT` for their\nrespective purposes.\n\nFor hinted fonts without an applicable version-1 ClearType policy, use the\nDirectWrite-style fallback of asymmetric NATURAL smoothing through 20 ppem\nand NATURAL_SYMMETRIC above 20 ppem.  Fonts without TrueType instructions\nremain symmetric.\n\nUse the resolved smoothing state for GETINFO bit 18 and the resolved\ngrid-fit state when deciding whether native v40 LCD hinting is enabled.\nLegacy DO_GRIDFIT and DO_GRAY flags are not treated as ClearType\nsymmetric-smoothing controls.\n"
    },
    {
      "commit": "b76738eff2f3846721f76f023cbb471396932669",
      "tree": "d234d68eaa3646b1cfcedad21cdab7252033b0c1",
      "parents": [
        "daeaf4b59b4be1c79d95b5844619bd9aa4af7f95"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Wed Aug 26 01:03:10 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Aug 27 15:38:04 2026 +0200"
      },
      "message": "* src/truetype/ttvarc.c (tt_varc_get_axis_indices): Fix zeros decoding.\n\nA TupleValues \"zeros\" run decodes to zero values, matching HarfBuzz\n(`TupleValues::decompile`, which memsets the run to 0) and fontTools; the\ncode instead wrote the running index (`indices[i] \u003d i`), so a zeros run of\nlength two or more overrode the wrong axes.  No test font exercises it (they\nuse runs of length one, where 0 \u003d\u003d i).\n\nAlso bound the run reads by the entry\u0027s own `tuple_limit` rather than the\nwhole-table `table_limit`, so a run straddling the entry end no longer\ndecodes bytes from adjacent entries (matches the counting pass in\n`tt_varc_parse_component`).\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "daeaf4b59b4be1c79d95b5844619bd9aa4af7f95",
      "tree": "9134505169e8e62f1c5635c57a0cc29fd822b69c",
      "parents": [
        "3f3bbf7068e8e46707e2bcec15d21ae59c8f9e88"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Wed Aug 26 00:58:11 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Aug 27 15:36:06 2026 +0200"
      },
      "message": "[ttvarc] Factor out common code.\n\nThe \u0027VARC\u0027 table has four CFF2-style INDEX structures that were each parsed\nby a separate hand-rolled copy; the missing offset-value validation that\ncaused the recent crashes had to be fixed in each copy independently.\nFactor the parsing and bounds checking into a helper function and route all\nfour call sites through it.\n\n* src/truetype/ttvarc.c (tt_varc_read_cff2_index_entry): New function.\n  (tt_varc_get_glyph_record, tt_varc_parse_component,\n  tt_varc_get_axis_indices): Use it.\n  (tt_varc_read_index2_data): Remove, superseded by the helper function.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "3f3bbf7068e8e46707e2bcec15d21ae59c8f9e88",
      "tree": "9bec7cc2e2efac2941b2004e57daff2fab839603",
      "parents": [
        "5e3827c80d5c1d3c779cd08c74891f97d27c4ccc"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Wed Aug 26 00:45:05 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Aug 27 15:19:19 2026 +0200"
      },
      "message": "[ttvarc] Validate 32-bit offsets before pointer arithmetic.\n\nSeveral unchecked u32 offsets from the table were added to base\npointers before the result was range-checked, which is undefined\npointer arithmetic on a wild offset.  Validate the offset values\nagainst the table extent first.\n\n* src/truetype/ttvarc.c (tt_varc_get_item_deltas): Bound `data_set_offset`\n  and the region offset.\n  (tt_varc_get_condition): Bound the condition offset and the\n  `cond_index * 4` array index.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "5e3827c80d5c1d3c779cd08c74891f97d27c4ccc",
      "tree": "bb700a32bf11390fc04108ac8c9d811494128f1b",
      "parents": [
        "a3d6230a638d2638f7e5b6c1a9bdcc19c5ec7a5b"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Wed Aug 26 00:44:58 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Aug 27 15:18:11 2026 +0200"
      },
      "message": "* src/truetype/ttvarc.c (tt_varc_get_item_deltas): Fix integer overflow.\n\n`total_deltas \u003d region_count * num_deltas` is computed in 32 bits from two\nattacker-controlled values.  A wrapped product under-sizes the `all_deltas`\nallocation while the accumulation loop still indexes it with the full\n`region_idx * num_deltas + k`, giving an out-of-bounds read.  Reject the\noverflow.  Also free `accumulators` on the allocation-failure path that\npreviously leaked it.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "a3d6230a638d2638f7e5b6c1a9bdcc19c5ec7a5b",
      "tree": "0dcd2e5f831565df3618605e3f332ef36543f61b",
      "parents": [
        "c853a3d45986b40b47182c4fc60cc0445042584d"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Wed Aug 26 00:44:52 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Aug 27 15:17:23 2026 +0200"
      },
      "message": "* src/truetype/ttvarc.c (tt_varc_parse_component): Fix success on failure.\n\nThe axis-value reading loop jumps to the `Fail` label on truncated data\nwithout setting `error`, which still holds `FT_Err_Ok` from the last\nsuccessful read.  `Fail` then frees `axis_values` and returns success, so\nthe caller runs `tt_varc_apply_axis_deltas` on a component whose\n`num_axis_values` is non-zero but `axis_values` is NULL, causing a NULL\ndereference.  Force a non-zero error at the label.\n\nFound by fuzzing the VARC code.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "c853a3d45986b40b47182c4fc60cc0445042584d",
      "tree": "1a9e7a7c12deb094d90c5dd624a98be90815c9d1",
      "parents": [
        "4ddc997e0798db7d23255ab7741b91da6d1a879f"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Wed Aug 26 00:44:45 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Aug 27 15:13:53 2026 +0200"
      },
      "message": "[ttvarc] Improve CFF2Index/TupleList offset validation.\n\nThe offset pairs read from the index structures were turned into data\npointers without checking the values against the end of the \u0027VARC\u0027\ntable (or requiring the 1-based offsets to be \u003e\u003d 1), allowing reads\nfar past the table.  Make the offset-array bounds checks overflow-safe\nwith division instead of multiplication.\n\n* src/truetype/ttvarc.c (tt_varc_parse_component, tt_varc_read_index2_data,\n  tt_varc_get_axis_indices): Validate offset values before computing data\n  pointers; avoid overflow in offset-array bounds checks.\n  (tt_varc_get_glyph_record): Reject zero (1-based) offsets.\n\nReported as\n\n  https://issues.oss-fuzz.com/issues/552370108\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "4ddc997e0798db7d23255ab7741b91da6d1a879f",
      "tree": "13d51f31ba4b4ff60381106269b0433243c00109",
      "parents": [
        "4800589f76dc62fbe523a74a59e0d4850a5dd7df"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Aug 25 12:36:55 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Aug 25 12:36:55 2026 +0200"
      },
      "message": "ttvarc.c: Avoid undefined left-shifts.\n\nReported as\n\n  https://issues.oss-fuzz.com/issues/552117135\n"
    },
    {
      "commit": "4800589f76dc62fbe523a74a59e0d4850a5dd7df",
      "tree": "0423f58b3c472d06e3620040aeb9cc2a49e4337b",
      "parents": [
        "382aba3ddf4e21b1580a1f2ee7036bd7249c40a6"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Mon Aug 24 09:29:03 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Aug 24 09:34:18 2026 +0200"
      },
      "message": "* src/truetype/ttvarc.c (tt_varc_get_glyph_record): Fix bounds check.\n\nReported as\n\n  https://issues.oss-fuzz.com/issues/551265180\n"
    },
    {
      "commit": "382aba3ddf4e21b1580a1f2ee7036bd7249c40a6",
      "tree": "5a84130767d4fa3797755fc051cea594a65ef7ff",
      "parents": [
        "5178bdc2af099c38d1ca6588904ed7d9ba3f849f"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Aug 24 06:23:25 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Mon Aug 24 06:23:25 2026 +0200"
      },
      "message": "ttvarc.c: Minor formatting.\n"
    },
    {
      "commit": "5178bdc2af099c38d1ca6588904ed7d9ba3f849f",
      "tree": "4582fd2e47577abd0f4143b02fbc19ddc5770c50",
      "parents": [
        "d939d15557ecd6309d19b6ac18be329adbced45d"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Wed Aug 19 20:37:39 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Wed Aug 19 20:43:42 2026 +0200"
      },
      "message": "[sfnt] Correctly handle HVAR/VVAR advance values for named instances.\n\nThis bug was introduced with commit 5987a9f51d.\n\nFixes issue #1452, which comes with a detailed analysis and a patch provided\nby an LLM.\n\n* src/sfnt/ttmtx.c (tt_face_get_metrics) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]:\n  Also check `FT_IS_NAMED_INSTANCE`.\n"
    },
    {
      "commit": "d939d15557ecd6309d19b6ac18be329adbced45d",
      "tree": "950c3bdc3287b240c2640254e9ee4b1977169edd",
      "parents": [
        "9e9d3b73f31367dbb4261f93c727a277f6632c77"
      ],
      "author": {
        "name": "Behdad Esfahbod (بهداد اسفهبد)",
        "email": "behdad@behdad.org",
        "time": "Mon Feb 09 19:27:39 2026 -0700"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Wed Aug 19 04:04:54 2026 +0000"
      },
      "message": "[cff, truetype] Add VARC (Variable Composites) table support.\n\nThe Variable Composites (\u0027VARC\u0027 table) technology allows font glyphs to\nreuse variants of other glyph shapes as their components.  This is similar\nto a feature that some font design tools already provide to designers, for\nexample, Glyphs calls this \u0027Smart Components\u0027.  The \u0027VARC\u0027 table allows us\ncarrying that design all the into the font binary file.\n\nThis enables significant file size saving in CJK fonts, for example, up\nto 90% savings for simple Hangul shapes.\n\nThe \u0027VARC\u0027 table is part of the ISO Open Font Format version 5, and is\nimplemented and enabled by default in HarfBuzz since 12.0.0 (Sep 2025) and\nFontTools.\n\nFor test fonts, see\n\n  https://github.com/notofonts/noto-cjk-varco/releases\n\n* include/freetype/config/ftoption.h, devel/ftoption.h\n  (TT_CONFIG_OPTION_VARC): New macro.\n* include/freetype/tttags.h (TTAG_VARC): New macro.\n* include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC11): New macro.\n* include/freetype/internal/fttrace.h (ttvarc): New macro.\n\n* include/freetype/internal/tttypes.h (TT_FaceRec) [TT_CONFIG_OPTION_VARC]:\n  New fields `tt_varc`, `face_varc`, `varc`, `varc_context`, and\n  `varc_loading_components`.\n\n* src/base/ftobjs.c [TT_CONFIG_OPTION_VARC]: Include `svvarc.h`.\n  (FT_Load_Glyph) [TT_CONFIG_OPTION_VARC]: Don\u0027t use auto-hinting for VARC\n  glyphs.\n\n* include/freetype/internal/services/svvarc.h, src/truetype/ttvarc.c,\n  src/truetype/ttvarc.h: New files.\n\n* src/truetype/rules.mk (TT_DRV_SRC): Add `ttvarc.c`.\n\n* src/truetype/truetype.c: Include `ttvarc.c`.\n* src/truetype/ttdriver.c [TT_CONFIG_OPTION_VARC]: Include `svvarc.h` and\n  `ttvarc.h`.\n  (tt_service_varc, tt_services) [TT_CONFIG_OPTION_VARC]: New structures.\n* src/truetype/ttgload.c [TT_CONFIG_OPTION_VARC]: Include `ttvarc.h`.\n  (TT_Load_Glyph) [TT_CONFIG_OPTION_VARC]: Handle VARC glyphs.\n\n* src/cff/cffdrivr.c [TT_CONFIG_OPTION_VAR]: Include `svvarc.h`.\n  (cff_varc_load, cff_varc_done, cff_varc_has_glyph, cff_varc_load_glyph,\n  cff_service_varc) [TT_CONFIG_OPTION_VAR]: New wrapper functions and\n  structure to provide the VARC service.\n  (cff_services): Updated.\n* src/cff/cffgload.c [TT_CONFIG_OPTION_VARC]: Include `svvarc.h`.\n  (cff_slot_load) [TT_CONFIG_OPTION_VARC]: Handle VARC glyphs.\n\n* src/sfnt/sfobjs.c [TT_CONFIG_OPTION_VARC]: Include `svvarc.h`.\n  (sfnt_init_face) [TT_CONFIG_OPTION_VARC]: Load the VARC service.\n  (sfnt_load_face) [TT_CONFIG_OPTION_VARC]: Try to load the \u0027VARC\u0027 table.\n  (sfnt_done_face) [TT_CONFIG_OPTION_VARC}: Clean up VARC handling.\n"
    },
    {
      "commit": "9e9d3b73f31367dbb4261f93c727a277f6632c77",
      "tree": "85fb2696005f0e13a9290810b72540249ce6958a",
      "parents": [
        "b04f789a8867ebb25207d331cfbf6bf21851a287"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri Aug 07 10:39:37 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri Aug 07 10:39:37 2026 -0400"
      },
      "message": "* tests/issue-1063/main.c: Clean up exit.\n\nFixes #1450."
    },
    {
      "commit": "b04f789a8867ebb25207d331cfbf6bf21851a287",
      "tree": "a924a2537d5e94dac19da4ad7579d9a1d5118463",
      "parents": [
        "ec3e2a83eac1698f1ab0a0a8b48233c73db044e3"
      ],
      "author": {
        "name": "Elliott Sales de Andrade",
        "email": "quantum.analyst@gmail.com",
        "time": "Fri Jul 31 23:12:47 2026 -0400"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Aug 01 08:25:41 2026 +0200"
      },
      "message": "* include/freetype/internal/ftdebug.h: Fix logging if `NDEBUG` is set.\n\nIn Meson, the default for `b_ndebug` is `is-release`, which will enable it\nwhen in release mode.  Additionally, in `dlg`, the default log level is\n`warn` if `NDEBUG` is set or `trace` otherwise.  Because `FT_LOG` uses the\n`trace` level always, all debug logging will be disabled if `b_ndebug` is\nset (or in release mode).\n\nUsing `NDEBUG` is not documented anywhere to toggle debug logging.  We thus\ndefine `DLG_LOG_LEVEL` so that `trace` level is always output by `dlg`.\nFreeType\u0027s other (runtime or otherwise) configuration remains as it is to\ntoggle logging per-component.\n"
    },
    {
      "commit": "ec3e2a83eac1698f1ab0a0a8b48233c73db044e3",
      "tree": "192359b45d4118cfa956eba15a0fee64a4ceb86e",
      "parents": [
        "27eeaf1170edcecb46b9e290a4c102a1096144bd"
      ],
      "author": {
        "name": "Elliott Sales de Andrade",
        "email": "quantum.analyst@gmail.com",
        "time": "Fri Jul 31 23:09:34 2026 -0400"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Aug 01 08:25:26 2026 +0200"
      },
      "message": "* meson.build: Add missing \u0027dlg\u0027 logging library.\n\nWithout this source file, the final library fails to link if you set\n`FT_DEBUG_LOGGING` for the build.\n"
    },
    {
      "commit": "27eeaf1170edcecb46b9e290a4c102a1096144bd",
      "tree": "51f302bdf47665af98e5b8b5f79183ac3fe5a3f0",
      "parents": [
        "f96ade51bc6763ce94ffff6b2dc39b34e1be41ba"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Jul 30 12:50:52 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Jul 30 12:50:52 2026 +0200"
      },
      "message": "CMakeLists.txt: Minor documentation improvement.\n"
    },
    {
      "commit": "f96ade51bc6763ce94ffff6b2dc39b34e1be41ba",
      "tree": "2ef3f6cd894ed6957192574b504e49a589651c55",
      "parents": [
        "ee38c68245653b3b09e1afaa63fe2deb0d5ff3ee"
      ],
      "author": {
        "name": "Yuriy Levchenko",
        "email": "1262716-irov@users.noreply.gitlab.freedesktop.org",
        "time": "Thu Jul 30 10:43:20 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Thu Jul 30 12:22:47 2026 +0200"
      },
      "message": "[cmake] Add an option to disable stream support.\n\n* CMakeLists.txt (FT_DISABLE_STREAM_SUPPORT): Add an option to define\nFT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT and use the generic system\nimplementation.\n\nFixes issue #1448.\n"
    },
    {
      "commit": "ee38c68245653b3b09e1afaa63fe2deb0d5ff3ee",
      "tree": "5cff08c95200b2df7bb22495897db70a0364b6f4",
      "parents": [
        "656cb777798fa420a13faba3758779e9ed6c4798"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Jul 29 18:10:25 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Jul 29 18:10:25 2026 -0400"
      },
      "message": "* (gray_raster_render): Fix a coding typo.\n\nFixes #1449.\n"
    },
    {
      "commit": "656cb777798fa420a13faba3758779e9ed6c4798",
      "tree": "d0ee48ec78cf0ce06b25c95d3d04ae1b125a6580",
      "parents": [
        "b6c6934a76fae579fce081b03e2e74aca17e7eeb"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Jul 20 22:26:12 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Jul 20 22:26:12 2026 -0400"
      },
      "message": "* src/sfnt/sfwoff.c (woff_open_font): Reject unrealistic sizes.\n\nFixes #1447.\n"
    },
    {
      "commit": "b6c6934a76fae579fce081b03e2e74aca17e7eeb",
      "tree": "327dd31a7a160a7b8d9cd63426b5c7303e10be9e",
      "parents": [
        "0d6de69ca85a9b97e933e5c3b1e53b0349026560"
      ],
      "author": {
        "name": "Drage",
        "email": "@timyychan",
        "time": "Sun Jul 19 22:18:38 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Jul 19 22:18:38 2026 -0400"
      },
      "message": "* src/sfnt/ttbdf.c (tt_face_find_bdf_prop): Fix OOB read.\n\nFixes #1446.\n"
    },
    {
      "commit": "0d6de69ca85a9b97e933e5c3b1e53b0349026560",
      "tree": "c88a2e2a372eb408acb33d70ec01c99f5a0b7f71",
      "parents": [
        "f01dec5e676847267834b881b25f6e8c79581163"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Jul 19 21:59:06 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Jul 19 21:59:06 2026 -0400"
      },
      "message": "[sdf] Fix use-after-free in `sdf_generate_with_overlaps`.\n\nWhen a glyph is rendered with `FT_RENDER_MODE_SDF` while the `sdf`\nmodule\u0027s `overlaps` property is enabled, `sdf_generate_with_overlaps`\nprocesses each contour on its own bitmap.  For every contour it calls\n`sdf_generate_subdivision`, which in turn calls `split_sdf_shape`; the\nlatter frees the original contour (`sdf_contour_done` -\u003e `FT_FREE`).\nAfter the call returned, the loop still wrote through the freed pointer\nwith `contour-\u003enext \u003d temp_contour` and then read it back via\n`contour \u003d contour-\u003enext` to advance -- a heap use-after-free (an\n8-byte out-of-bounds write, CWE-416) reachable from a crafted font.\n\nThe value read back is already held in the `temp_contour` local, so the\nrestore write serves no purpose and is unsafe.  Drop it and advance the\nloop with `temp_contour` directly, so the freed `contour` is never\ndereferenced after the subdivision call.\n\n* src/sdf/ftsdf.c (sdf_generate_with_overlaps): Do not write to or read\nfrom `contour` after `sdf_generate_subdivision` has freed it; use the\nsaved `temp_contour` to continue the iteration.\n\nFixes #1445.\n\n\n(cherry picked from commit efc07621de9c4b8dc2f11032e52ad86eddbbdbdf)\n\nCo-authored-by: Hyunwoo Kim \u003chw@hwhw.kr\u003e"
    },
    {
      "commit": "f01dec5e676847267834b881b25f6e8c79581163",
      "tree": "0c090b540778f54992a56b20469b4081e3a58215",
      "parents": [
        "5336c0d4da22a13dab3389eb153b12672fdf841c"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jul 14 08:15:16 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Jul 14 08:15:16 2026 +0200"
      },
      "message": "[base] Prevent signed overflow.\n\nReported as\n\n  https://issues.oss-fuzz.com/issues/530322169\n\n* src/base/ftoutln.c (FT_Outline_Get_Orientation): Use `ADD_*`.\n"
    },
    {
      "commit": "5336c0d4da22a13dab3389eb153b12672fdf841c",
      "tree": "0fc86b767bd83410613245026e10d39e05c53c0c",
      "parents": [
        "f03139553fae6ac60924eb6ab5cd45b2229d9210"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 30 10:20:55 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Wed Jul 01 05:54:58 2026 +0200"
      },
      "message": "Revert \"[autofit] Derive fill orientation without a separate outline pass.\"\n\nThis reverts commit 1f3ab3cdcef3433ec8d8a13446a45b8102929402.\n\nThat commit inlined a shoelace accumulator into the `af_glyph_hints_reload`\npoint-setup loop on the theory that the speedup came from sharing the\ntraversal with that loop (\"loop fusion\").  An A/B/C benchmark with the\nintermediate variant -- inlining reverted but\n`FT_Outline_Get_Orientation` itself rewritten as a single-pass 64-bit\nshoelace -- shows the inline version and the standalone version are\nstatistically indistinguishable (both 2.854 us/op vs the original\n2.914 us/op on `ftbench -b a -f 20`, Google Sans Flex).  The entire\nwin is algorithmic (dropping the bbox pre-pass and the per-iteration\nshifts), not from sharing the loop.\n\nWith the previous commit moving that win into `FT_Outline_Get_Orientation`\nitself, the inline copy in autofit is redundant and worth removing:\nthe standalone call is the same speed, the public API benefits every\ncaller, and `af_glyph_hints_reload` keeps its single-purpose loop.\n\n* src/autofit/afhints.c (af_glyph_hints_reload): Restore the\n`FT_Outline_Get_Orientation` call; drop the inlined shoelace\naccumulator.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "f03139553fae6ac60924eb6ab5cd45b2229d9210",
      "tree": "549bffc79431e4ba2b82ebe129c0de666bded3d9",
      "parents": [
        "12f5eb32aedb3e27d47c22b0447dc4363703ed94"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 30 10:20:40 2026 -0600"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Wed Jul 01 05:53:11 2026 +0200"
      },
      "message": "[base] Drop the bbox pre-pass from `FT_Outline_Get_Orientation`.\n\nThe function walked the outline twice: once via `FT_Outline_Get_CBox`\nto pick coordinate shifts that keep the signed-area accumulator inside\n32 bits, then again to actually accumulate the shoelace.  On platforms\nwith native 64-bit arithmetic the bbox pass and the per-iteration\nshifts are unnecessary -- a 64-bit accumulator absorbs the area of any\nsane glyph in a single pass without overflow.\n\nAdd an `#ifdef FT_INT64` fast path that does exactly that, and keep\nthe existing two-pass shifted variant verbatim as the 32-bit\nfallback.  Measured ~2% faster on the autohint load benchmark\n(`ftbench -b a -f 20`, Google Sans Flex: 2.914 -\u003e 2.854 us/op);\nbenefits any caller, not just autofit.\n\nThe fast path drops the explicit `xMin\u003d\u003dxMax`/`yMin\u003d\u003dyMax` collapse\ncheck -- the shoelace returns area 0 for such degenerate contours\nanyway, so the final sign test reports `FT_ORIENTATION_NONE` without\nhelp.\n\n* src/base/ftoutln.c (FT_Outline_Get_Orientation): Add an\n`#ifdef FT_INT64` single-pass shoelace using a 64-bit accumulator;\nkeep the 32-bit two-pass variant as the `#else` fallback.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "12f5eb32aedb3e27d47c22b0447dc4363703ed94",
      "tree": "ff005c27d1fa0535296b297ecafa54119378ced5",
      "parents": [
        "09b51e969cb9ea03e58992d620e3ff4f317d0051"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Jun 28 07:42:46 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Jun 28 07:42:46 2026 -0400"
      },
      "message": "[truetype] Fix GS leaks when prep is missing.\n\n* src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Modify\nGS only when programs have actually been executed.\n\nOtherwise, GS leaks from the last glyf program. Fixes #1443.\n"
    },
    {
      "commit": "09b51e969cb9ea03e58992d620e3ff4f317d0051",
      "tree": "04edd71d379a93f693b94e2247656d08c1dececf",
      "parents": [
        "1f3ab3cdcef3433ec8d8a13446a45b8102929402"
      ],
      "author": {
        "name": "Derek B. Noonburg",
        "email": "derekn@glyphandcog.com",
        "time": "Sun Jun 28 06:44:01 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Jun 28 06:44:01 2026 -0400"
      },
      "message": "* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Bump rendering limits.\n\nSome OCR fonts attempt to jam handwritten signatures into a glyph.\n"
    },
    {
      "commit": "1f3ab3cdcef3433ec8d8a13446a45b8102929402",
      "tree": "fe8c76748be05e34d4689f71fdc7fe9b86858c00",
      "parents": [
        "504707eb960bbb034a384ebca35f037b645f8266"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 23 15:05:02 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sun Jun 28 11:20:27 2026 +0200"
      },
      "message": "[autofit] Derive fill orientation without a separate outline pass.\n\n`af_glyph_hints_reload` called `FT_Outline_Get_Orientation` once per\nglyph solely to choose the major-direction sign.  That function walks\nall points twice -- a bounding-box pass to pick overflow shifts, then a\nsigned-area pass -- even though the very next loop in `reload` already\nvisits every point and computes each edge vector.\n\nAccumulate the contour signed area (shoelace) in that existing loop and\nset the direction from its sign afterwards, dropping the separate call.\nA 64-bit accumulator replaces the bounding-box-based coordinate shift\nthat `FT_Outline_Get_Orientation` used to keep the area from\noverflowing.\n\nOutput is bit-identical: force-autohinted outlines of all glyphs match\nacross several sizes and weights.  ~3.5% faster on the autohint load\nbenchmark (`ftbench -b a -f 20`, Google Sans Flex: 8.46 -\u003e 8.17 us/op).\n\n* src/autofit/afhints.c (af_glyph_hints_reload): Accumulate the signed\ncontour area in the point-setup loop and derive the fill direction from\nits sign, instead of calling `FT_Outline_Get_Orientation`.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "504707eb960bbb034a384ebca35f037b645f8266",
      "tree": "221946fba902dedb2bf14f71f2e8f0f0d12e1600",
      "parents": [
        "7c952c1b0d9eac1681dad8de09f5bb193ac1ed40"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 23 14:34:52 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 10:44:46 2026 +0200"
      },
      "message": "[truetype] Hoist the gvar tuple-header bounds check out of the loop. (5/5)\n\nThe per-tuple `4 \u003e stream-\u003elimit - p` check in the tuple-variation loop\nof `TT_Vary_Apply_Glyph_Deltas` ran once for every tuple, even though\nthe headers are walked linearly through a cursor whose extent is known\nup front.\n\nCheck the four-byte minimum of all tuple headers once, before the loop,\nso the common path no longer tests bounds per tuple.  This stays safe:\n`p` only ever advances over the headers (active tuples read their data\nthrough a separate cursor) and `stream-\u003elimit` is constant within the\nframe, which maintains the invariant that at least `4 * (tupleCount - i)`\nbytes remain at the start of tuple `i`.  The embedded and intermediate\nbranches consume more than that four-byte minimum, so they re-check the\nsurplus against the remaining tuples\u0027 reserve, preserving the invariant.\nOutput is bit-identical; ~6% faster (1.39 -\u003e 1.30 ms) on the\ndraw-all-glyphs benchmark (Google Sans Flex, wght\u003d500).\n\n* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Replace the\nper-tuple four-byte bounds check with a single check before the loop;\nmake the embedded and intermediate coordinate reads also account for the\nfour-byte minimum of the remaining tuples.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "7c952c1b0d9eac1681dad8de09f5bb193ac1ed40",
      "tree": "dddd263d49c2283add3459bd871c6dda2582d980",
      "parents": [
        "18e4a9aa701358b8bc4127d30029b491e459fd9e"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 23 13:57:43 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 10:44:42 2026 +0200"
      },
      "message": "[truetype] Add a fast path to the gvar tuple loop. (4/5)\n\nNow that the per-glyph scratch buffers are pooled, the time\n`TT_Vary_Apply_Glyph_Deltas` spends iterating tuple-variation headers\nstands out.  Most of a glyph\u0027s tuples are inactive for the current\ninstance, yet every header was dispatched on its flags before the\ncached shared-tuple scalar was consulted.\n\nReorder the loop so the cache is consulted with a single range test\nright after the tuple index is read: a cached scalar of zero continues\nto the next tuple immediately, and a cached non-zero scalar is applied\nwithout recomputing the factor.  The scalars stay valid while glyphs\nare loaded, so almost every shared tuple hits the cache.  Output is\nbit-identical; ~8% faster (1.51 -\u003e 1.39 ms) on the draw-all-glyphs\nbenchmark (Google Sans Flex, wght\u003d500).\n\nThe test\n\n  ( tupleIndex \u0026 ~GX_TI_PRIVATE_POINT_NUMBERS ) \u003c blend-\u003etuplecount\n\ndepends on the embedded (0x8000), intermediate (0x4000), and reserved\n(0x1000) tuple flags all pushing the masked value to at least 0x1000,\nwhich holds only while `blend-\u003etuplecount` stays within the 12-bit\ntuple-index range; clamp it at load time.  Out-of-range indices\ntherefore no longer reach the shared-tuple branch, so also restore the\nbounds check guarding `blend-\u003etuplecoords`.\n\n* src/truetype/ttgxvar.c (ft_var_load_gvar): Clamp `blend-\u003etuplecount`\nto `GX_TI_TUPLE_INDEX_MASK + 1`; shared tuples beyond the addressable\nindex range can never be referenced.\n(TT_Vary_Apply_Glyph_Deltas): Consult the cached shared-tuple scalar\nbefore the per-flag header dispatch; restore the invalid tuple-index\nerror path.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "18e4a9aa701358b8bc4127d30029b491e459fd9e",
      "tree": "6a9970fd45d68d4adbc832e7901c0cffe722663f",
      "parents": [
        "0fccaa6ed7c2ad61eff01e440668a6a17b622af7"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 23 13:23:54 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 10:44:38 2026 +0200"
      },
      "message": "[truetype] Cache item-variation-store region scalars. (3/5)\n\n`tt_var_get_item_delta` (used, e.g., for \u0027HVAR\u0027 advance adjustment, called\nonce per glyph during glyph loading) recomputed `tt_calculate_scalar`\nfor every region on every call, although the result depends only on the\nnormalized coordinates -- which stay constant while glyphs are loaded.\n\nCache the per-region scalars in the item variation store and recompute\nthem only when the coordinates change, detected by comparing against a\nstored snapshot.  The snapshot check also transparently handles the\ntemporary coordinate swap performed during \u0027avar2\u0027 processing.  Output\n(outlines and advances) is bit-identical; ~4% faster (1.58 -\u003e 1.51 ms).\n\n* include/freetype/internal/ftmmtypes.h (GX_ItemVarStoreRec): New fields\n`regionScalars` and `cachedCoords`.\n\n* src/truetype/ttgxvar.c (tt_var_get_item_delta): (Re)compute and cache\nall region scalars when the coordinates differ from the cached snapshot,\nthen index the cache instead of recomputing per region; fall back to\ndirect computation if the cache cannot be allocated.\n(tt_var_done_item_variation_store): Free the new fields.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "0fccaa6ed7c2ad61eff01e440668a6a17b622af7",
      "tree": "5237c3bc30e62704e6041ad4d41d90fe2eebca3c",
      "parents": [
        "b2335b50a46a7d3e865a1d2335d6f404235cd329"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 23 12:12:14 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 10:44:34 2026 +0200"
      },
      "message": "[truetype] Reuse scratch buffers for gvar point-number lists too. (2/5)\n\nFollow-up to the previous commit: the packed point-number lists read by\n`ft_var_readpackedpoints\u0027 were still heap-allocated -- the shared list\nonce per glyph and each private list per tuple.  Carve them from the\nsame per-face scratch pool instead.\n\nThis requires moving the pool setup ahead of the shared-point-number\nread (the pool now provides that buffer), so the working pool is laid\nout before any point list is parsed.  As with the delta arrays, a list\nlarger than the glyph\u0027s point count falls back to a heap allocation.\n\nBeyond saving the allocations themselves, reusing fixed buffer\naddresses across glyphs keeps the working set warm in cache, which is\nwhere most of the gain comes from.  Output is bit-identical; a further\n~10% on the draw-all-glyphs benchmark (1.74 -\u003e 1.56 ms), ~17% versus\nthe original.\n\n* src/truetype/ttgxvar.c (ft_var_readpackedpoints): New `scratch\u0027 and\n`scratch_cap\u0027 arguments, mirroring `ft_var_readpackeddeltas\u0027.\n(TT_Vary_Apply_Glyph_Deltas): Add `shared_points_buf\u0027/`local_points_buf\u0027\nto the pool; set the pool up before reading the shared point numbers;\nfree only heap fallbacks.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "b2335b50a46a7d3e865a1d2335d6f404235cd329",
      "tree": "272d3f010ea25e4372001f1d2cd7f7e494837f4d",
      "parents": [
        "815fb588e71d28d4f0544e6f54fe7e57de6f6c0d"
      ],
      "author": {
        "name": "Behdad Esfahbod",
        "email": "behdad@behdad.org",
        "time": "Tue Jun 23 12:00:28 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 10:42:44 2026 +0200"
      },
      "message": "[truetype] Reuse scratch buffers in gvar glyph delta application. (1/5)\n\nThis change starts a series of commits that, if combined, speed up loading\nof unhinted outlines at wght\u003d500 from the \u0027GoogleSansFlex\u0027 monster-font by\n30%.\n\nDrawing glyphs from a variable font spends a large fraction of its time\nin the allocator: `TT_Vary_Apply_Glyph_Deltas` allocated a working pool\nonce per glyph, and `ft_var_readpackeddeltas` allocated two delta arrays\nper active tuple.  On a draw-all-glyphs benchmark (Google Sans Flex,\nwght\u003d500) these accounted for ~9% of total time.\n\nRe-use buffers instead: keep the working pool on the face (grown on\ndemand) and carve the per-tuple delta arrays out of it, falling back to\na heap allocation only when a tuple needs more entries than the glyph\nhas points.  Output is bit-identical; ~7% faster (1.89 -\u003e 1.76 ms).\n\n* src/truetype/ttgxvar.h (GX_BlendRec): New fields `glyph_delta_pool`\nand `glyph_delta_pool_size`.\n\n* src/truetype/ttgxvar.c (ft_var_readpackeddeltas): New `scratch` and\n`scratch_cap` arguments; use the caller-provided buffer when it is large\nenough, else allocate as before.\n(TT_Vary_Apply_Glyph_Deltas): Reuse a per-face scratch pool grown on\ndemand instead of allocating it per glyph; carve `deltas_x`/`deltas_y`\nout of the pool and free only heap fallbacks.\n(tt_done_blend): Free `glyph_delta_pool`.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "815fb588e71d28d4f0544e6f54fe7e57de6f6c0d",
      "tree": "62e4f1e159580be043a8824ada4b6476a309f33d",
      "parents": [
        "747b4e90039d558fd1fa28d042b8a48fa5b43acd"
      ],
      "author": {
        "name": "TheLastRar",
        "email": "TheLastRar@users.noreply.github.com",
        "time": "Mon Apr 13 18:43:20 2026 +0100"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 06:44:56 2026 +0200"
      },
      "message": "* meson.build: Include CMake name of libpng in dependency search.\n\nMeson supports searching both `pkg-config` and `CMake` for dependencies,\nhowever, \u0027libpng\u0027 uses a different name between the two (\u0027libpng\u0027 and \u0027PNG\u0027,\nrespectively).\n\nSpecify both package names for \u0027libpng\u0027.\n"
    },
    {
      "commit": "747b4e90039d558fd1fa28d042b8a48fa5b43acd",
      "tree": "1c53f080849ec03383cb8c0b452715a1065baca0",
      "parents": [
        "25a08f24cfc0da879d1938352d026532f280b77e"
      ],
      "author": {
        "name": "TheLastRar",
        "email": "TheLastRar@users.noreply.github.com",
        "time": "Mon Apr 13 18:43:20 2026 +0100"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Sat Jun 27 06:44:10 2026 +0200"
      },
      "message": "* meson.build, .gitlab-ci.yml: Require Meson 0.60.0 or newer.\n\nVersion 0.60.0 was released in October 2021; we need this for the next\ncommit.\n"
    },
    {
      "commit": "25a08f24cfc0da879d1938352d026532f280b77e",
      "tree": "f2f31c89feb27a877d11684530c35cca7c2eea52",
      "parents": [
        "b08a2eb0dd37f4a6c886fa5b0ecf5b3e1d27aac7"
      ],
      "author": {
        "name": "Hennadii Stepanov",
        "email": "hebasto@gmail.com",
        "time": "Thu Jun 04 13:08:30 2026 +0000"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu Jun 04 09:08:30 2026 -0400"
      },
      "message": "[CMake] Fix shared library versioning on OpenBSD and NetBSD.\n\nFixes #1440.\n\n* CMakeLists.txt: Implement it.\n"
    },
    {
      "commit": "b08a2eb0dd37f4a6c886fa5b0ecf5b3e1d27aac7",
      "tree": "7e9bbd0a8e7caf46835070ea68372b25ba4cabe8",
      "parents": [
        "27229dccf89edabd16f5a13e13a30b486384df7f"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 31 14:06:45 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 31 14:06:45 2026 -0400"
      },
      "message": "* src/autofit/afgsub.c (af_validate_coverage): Use unsigned variables.\n"
    },
    {
      "commit": "27229dccf89edabd16f5a13e13a30b486384df7f",
      "tree": "2fff68952f2c647a0a13d257f6d050b1114edc7d",
      "parents": [
        "f9010851e4c8f5589955e70c32c5a8d9508c39e9"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 31 08:07:38 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 31 08:07:38 2026 -0400"
      },
      "message": "* src/autofit/afgsub.c (af_validate_coverage): Reject overlaps.\n"
    },
    {
      "commit": "f9010851e4c8f5589955e70c32c5a8d9508c39e9",
      "tree": "e46b4af0fc7fadff6b0e441a08cebce8a2e4656a",
      "parents": [
        "7e0e56f84fd53cf38378d33c8fc8f92d12ab9ac6"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri May 29 06:43:37 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri May 29 06:46:24 2026 +0200"
      },
      "message": "* src/autofit/afgsub.c (af_validate_coverage): Check last element.\n\nFixes issue #1439.\n"
    },
    {
      "commit": "7e0e56f84fd53cf38378d33c8fc8f92d12ab9ac6",
      "tree": "7cbc2480f4153bba76fd82dfb2d23a91f5a491b2",
      "parents": [
        "c0bac4c2d229e5501ed0218ef789cb8ed75b8c52"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 17 12:29:34 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 17 12:29:34 2026 -0400"
      },
      "message": "Revert to signed span positioning.\n\nIn the context of FT_Outline_Render, the outline can be placed\narbitrarily and the resulting spans should be signed. This partially\nreverts ef04e4eb2056 and fixes #1410.  However, for internal use,\nwhen outlines are placed in the first quadrant, we still can interpret\npositions as unsigned.\n\n* include/freetype/ftimage.h (FT_Span): Use signed position again.\n* src/smooth/ftgrays.c (gray_sweep_direct): Sync with FT_Span.\n* src/smooth/ftsmooth.c (ft_smooth_lcd_spans, ft_smooth_lcdv_spans,\nft_smooth_overlap_spans): Prevent sign extension.\n"
    },
    {
      "commit": "c0bac4c2d229e5501ed0218ef789cb8ed75b8c52",
      "tree": "3e343473178703a7dbf8d41460010e2aa126270e",
      "parents": [
        "aaf69b609f8114df99f5be0b8872ffbaf66032f7"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 15 10:38:45 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 15 10:38:45 2026 -0400"
      },
      "message": "* src/smooth/ftgrays.c (gray_TWorker): Remove redundancies.\n(gray_raster_render, gray_convert_glyph, gray_set_cell): Updated."
    },
    {
      "commit": "aaf69b609f8114df99f5be0b8872ffbaf66032f7",
      "tree": "67015936c02238e061c3e04c442cb52d3719ce27",
      "parents": [
        "ce82ebedfeab072a86fad2767cc3ad34a9465590"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu May 14 23:39:27 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu May 14 23:39:27 2026 -0400"
      },
      "message": "* src/raster/ftraster.c (Render_Single_Pass): Simplify bisections.\n"
    },
    {
      "commit": "ce82ebedfeab072a86fad2767cc3ad34a9465590",
      "tree": "3c7a9fc7a727bb725f844b6750b441f41ec4d8c5",
      "parents": [
        "5a280ecde6f324de0d226261036e736e0cb49a71"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu May 14 23:14:25 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu May 14 23:14:25 2026 -0400"
      },
      "message": "* src/smooth/ftgrays.c (gray_convert_glyph): Simplify bisections.\n"
    },
    {
      "commit": "5a280ecde6f324de0d226261036e736e0cb49a71",
      "tree": "a24b67ca7305dfa6036f5342a17c3f441203afc3",
      "parents": [
        "8fa928f1617aba65f45b00f0dcb109f077b7741e"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed May 13 21:53:23 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed May 13 21:53:23 2026 -0400"
      },
      "message": "* src/truetype/ttgxvar.c (TT_Get_Var_Design): Zero extras.\n\nFixes #1436."
    },
    {
      "commit": "8fa928f1617aba65f45b00f0dcb109f077b7741e",
      "tree": "006b5813409d4d6e64379e1c7d8d5800b7af3493",
      "parents": [
        "c39ca391b34ca8afe2dc3a8fed51be216f77588d"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed May 13 21:31:32 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed May 13 21:31:32 2026 -0400"
      },
      "message": "* src/type1/t1load.c (T1_Get_Var_Design): Updated."
    },
    {
      "commit": "c39ca391b34ca8afe2dc3a8fed51be216f77588d",
      "tree": "e9dab662c3ca20c50165c33ce62e85e0cb0f40a4",
      "parents": [
        "3c364321adbdbc8a913f2ed1502babfe8044f434"
      ],
      "author": {
        "name": "Deborah Goldsmith",
        "email": "goldsmith@apple.com",
        "time": "Tue May 12 23:48:38 2026 +0000"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue May 12 19:48:38 2026 -0400"
      },
      "message": "[hvf] Fix macro usage and metrics calculations.\n\n* src/hvf/hvfload.c (hvf_render_callback): Fix glyph loader macro calls\nand metrics calculations.\n* src/hvf/hvfobjs.c (hvf_refresh_axis_coordinates,\nhvf_init_axis_coordinates): Tweak macro usage.\n* src/hvf/hvfobjs.h (HVF_RenderContext): Remove `face`.\n\n* include/freetype/ftmoderr.h: Add HVF error base.\n"
    },
    {
      "commit": "3c364321adbdbc8a913f2ed1502babfe8044f434",
      "tree": "0c083ad7883a75d5947d3dd936e94598921b417f",
      "parents": [
        "fae1e3160e727ae1fc19c54e54d71e9bd1d0c917"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue May 12 19:14:54 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue May 12 19:14:54 2026 -0400"
      },
      "message": "[smooth, raster] Fix signedness warning.\n\n* src/smooth/ftgrays.c (gray_convert_glyph): Use unsigned estimate.\n* src/raster/ftraster.c (ft_black_render): Ditto and expand.\n"
    },
    {
      "commit": "fae1e3160e727ae1fc19c54e54d71e9bd1d0c917",
      "tree": "5f4fdd34ac339dcba7468d6182536e18e30abb6f",
      "parents": [
        "9a4751a61d6d9fda7b96d6e7cfcb4029aff79aec"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 14:14:48 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 14:14:48 2026 -0400"
      },
      "message": "[raster] Dynamic pool allocation.\n\nUse pool allocation strategy similar to that of the smooth rasterizer.\nThis is beneficial at sizes larger than 100 ppem.\n\n* src/raster/ftraster.c (Render_Single_Pass): Move pool allocation...\n(ft_black_render): ... here. Allocate larger pools dynamically.\n\n* include/freetype/config/ftoption.h: Update comment.\n* devel/ftoption.h: Ditto.\n"
    },
    {
      "commit": "9a4751a61d6d9fda7b96d6e7cfcb4029aff79aec",
      "tree": "926f07796519b762d99fd7fa2062b22b38a7df8a",
      "parents": [
        "2c041d32fa14afa7845143d29f29c3c68f26bfcd"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 09:51:56 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 09:51:56 2026 -0400"
      },
      "message": "* src/base/ftbitmap.c (FT_Bitmap_Blend): Fix undefined shift.\n\nReported in\n  https://issues.oss-fuzz.com/issues/510113351\n"
    },
    {
      "commit": "2c041d32fa14afa7845143d29f29c3c68f26bfcd",
      "tree": "065903fda5cb98e4652d0b0bcd8d5ce2faa54dbc",
      "parents": [
        "a1dd8f8d682cd5b9d0637d0a003a99b8bdee56b7"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 09:03:57 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 09:03:57 2026 -0400"
      },
      "message": "* src/base/ftbitmap.c (FT_Bitmap_Blend): Refactor to avoid warnings.\n"
    },
    {
      "commit": "a1dd8f8d682cd5b9d0637d0a003a99b8bdee56b7",
      "tree": "c5a8e0909dbb70060957e2effea719056fdc1336",
      "parents": [
        "8cbc8a77586bbaed1d7e010ca346c371e4774b28"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 22:05:27 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 09 07:11:58 2026 -0400"
      },
      "message": ".gitlab-ci.yml: Update Windows pipeline.\n"
    },
    {
      "commit": "8cbc8a77586bbaed1d7e010ca346c371e4774b28",
      "tree": "739e1774d3b9306b40672850825b0bb398357ef7",
      "parents": [
        "7c08535abd05ada10f1382c4728773db7badd0db"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 21:21:45 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 21:21:45 2026 -0400"
      },
      "message": "* src/smooth/ftgrays.c: Comments expanded.\n"
    },
    {
      "commit": "7c08535abd05ada10f1382c4728773db7badd0db",
      "tree": "637a35ccaa9285c11497adb412b404983171e182",
      "parents": [
        "a39ef7632e3729f699aab928645ae4a91470ec43"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 18:34:38 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 18:34:38 2026 -0400"
      },
      "message": "* docs/CHANGES: Draft recent changes.\n"
    },
    {
      "commit": "a39ef7632e3729f699aab928645ae4a91470ec43",
      "tree": "ce02735ebd5e2635fcf1203725701ab986766d02",
      "parents": [
        "a1bbf07413107a483ea717c383dc5e7d2b32be34"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 18:14:53 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Fri May 08 18:14:53 2026 -0400"
      },
      "message": "[smooth] Dynamic pool allocation.\n\nThe fixed pool allocation on stack is very fast and works very well\nfor rendering glyphs smaller than 40 pixels. Larger glyphs have to be\nsplit and rendered piecewise, which is slower.  This commit introduces\ndynamic pool allocation for larger glyphs.  Complex large glyphs are\nnow rendered about 2x faster.\n\n* src/smooth/ftgrays.c (gray_convert_glyph): Use simpler banding schema\nin case of rendering emergency.\n(gray_raster_render): Allocate larger pools dynamically.\n\n* include/freetype/config/ftoption.h: Explain the render pool size.\n* devel/ftoption.h: Ditto.\n"
    },
    {
      "commit": "a1bbf07413107a483ea717c383dc5e7d2b32be34",
      "tree": "1bfec243b732572c37e80616285f5b61eb831def",
      "parents": [
        "7e3750982be8c6c71a572ef6829c89f27f9c989b"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri May 08 05:38:23 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Fri May 08 05:38:23 2026 +0200"
      },
      "message": "* builds/windows/vc2010/index.html: Update file descriptions.\n\nFixes issue #1434.\n"
    },
    {
      "commit": "7e3750982be8c6c71a572ef6829c89f27f9c989b",
      "tree": "738a17879f8bd0de178237ac08d75cb0e21966ee",
      "parents": [
        "968af86becaae66f571feec0c8ad11c1bc39ddd9"
      ],
      "author": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:25:40 2026 +0000"
      },
      "committer": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:25:40 2026 +0000"
      },
      "message": "* src/truetype/ttinterp.c (TT_RunIns): Remove dead code.\n\nFixes #1433.\n"
    },
    {
      "commit": "968af86becaae66f571feec0c8ad11c1bc39ddd9",
      "tree": "88aff164feb6e4bb048ced44ff1d29ce600bf9ae",
      "parents": [
        "1ec3406aef4f19a3808f06317280d011500ee0b5"
      ],
      "author": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:16:55 2026 +0000"
      },
      "committer": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:16:55 2026 +0000"
      },
      "message": "* src/psaux/psintrp.c (cf2_interpT2CharString): Fix off-by-one in the subroutine nesting depth check.\n\nFixes #1432.\n"
    },
    {
      "commit": "1ec3406aef4f19a3808f06317280d011500ee0b5",
      "tree": "5751d6b24bdc6c125034c8b0afd892ed5d164e99",
      "parents": [
        "287206a96b200f9ab048bb0d83a4dbab8766b9f8"
      ],
      "author": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:13:16 2026 +0000"
      },
      "committer": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:13:16 2026 +0000"
      },
      "message": "* src/psaux/psstack.c (cf2_stack_roll): Process top stack elements instead of bottom ones.\n\nFixes #1431.\n"
    },
    {
      "commit": "287206a96b200f9ab048bb0d83a4dbab8766b9f8",
      "tree": "1b89aba4ee3db7e14e416132b85cd16657adc9fd",
      "parents": [
        "df2fb115bf874a242a9fd49aa99c3c2fd41d151c"
      ],
      "author": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:00:15 2026 +0000"
      },
      "committer": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 13:00:15 2026 +0000"
      },
      "message": "* src/truetype/ttinterp.c (Ins_WCVTF): Add missing CVT copy-on-write protection.\n\nFixes #1430.\n"
    },
    {
      "commit": "df2fb115bf874a242a9fd49aa99c3c2fd41d151c",
      "tree": "0dd6568a8e15355d540a9dd44cd4924074fde09f",
      "parents": [
        "1f705ffb716c7a35efe13d3b58f62ef7c4c6415d"
      ],
      "author": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 12:47:52 2026 +0000"
      },
      "committer": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 12:47:52 2026 +0000"
      },
      "message": "* src/psaux/psintrp.c (cf2_doBlend): Implement proper bounds check accounting for all operands.\n\nFixes #1429.\n"
    },
    {
      "commit": "1f705ffb716c7a35efe13d3b58f62ef7c4c6415d",
      "tree": "ce8085c55a9fd6187d269d9f324a79d2502bde7f",
      "parents": [
        "b6bcd2177f72bb4842c7701d7b7f633bb3fc951a"
      ],
      "author": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 12:29:45 2026 +0000"
      },
      "committer": {
        "name": "Mateusz Jurczyk",
        "email": "mjurczyk@google.com",
        "time": "Thu May 07 12:31:59 2026 +0000"
      },
      "message": "* src/psaux/psstack.c (cf2_stack_setReal): Fix off-by-one in index check.\n\nFixes #1428.\n"
    },
    {
      "commit": "b6bcd2177f72bb4842c7701d7b7f633bb3fc951a",
      "tree": "23edf1dc6a4cf1119488d27974f786abc371169c",
      "parents": [
        "53850f3cd538d62070f42056e881914e7de2ac08"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 03 13:21:19 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 03 13:21:19 2026 -0400"
      },
      "message": "* src/base/ftbitmap.c (FT_Bitmap_Blend): Check final dimensions.\n\nFixes #1413.\n"
    },
    {
      "commit": "53850f3cd538d62070f42056e881914e7de2ac08",
      "tree": "870a1815689e26ba4454cc9f373b44055d210d9a",
      "parents": [
        "cbe12767ea73d1006edc75fcd61c0b0d2a88f34e"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 03 13:10:01 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun May 03 13:10:01 2026 -0400"
      },
      "message": "* src/base/ftbitmap.c (FT_Bitmap_Blend): Refactor.\n"
    },
    {
      "commit": "cbe12767ea73d1006edc75fcd61c0b0d2a88f34e",
      "tree": "46a7b7715155b8ad7f9d48394c735b66142d87d3",
      "parents": [
        "590b77014bd920d0bdf64c039fddbce89a288b83"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 02 15:17:35 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 02 15:17:35 2026 -0400"
      },
      "message": "* src/base/ftobjs.c (FT_Render_Glyph_Internal): Protect FT_LOAD_COLOR.\n\nNow only *scalable* COLRv0 layers can be rendered with FT_LOAD_COLOR,\nin accordance with Chromium. Fixes #1425, also see !424.\n"
    },
    {
      "commit": "590b77014bd920d0bdf64c039fddbce89a288b83",
      "tree": "dfad3530481e564af2922f8c5fefbf26c9992aba",
      "parents": [
        "6d9fc45fc4bca8aef0b8f65592520673638c3334"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 02 15:09:51 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sat May 02 15:09:51 2026 -0400"
      },
      "message": "* src/base/ftobjs.c (FT_Render_Glyph_Internal): Formatting.\n"
    },
    {
      "commit": "6d9fc45fc4bca8aef0b8f65592520673638c3334",
      "tree": "41ce8fb14a29fc8b4ff7e71a6077d58cf478c919",
      "parents": [
        "0d45c7f1911bc6db0bf072eea0c8cdccd77bc6b3"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue Apr 28 18:56:18 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue Apr 28 18:56:18 2026 -0400"
      },
      "message": "* src/truetype/ttgxvar.c (tt_delta_shift): Use unsigned references.\n"
    },
    {
      "commit": "0d45c7f1911bc6db0bf072eea0c8cdccd77bc6b3",
      "tree": "4301e5e13484ccef9c66eea1f5a92b41fac8810e",
      "parents": [
        "5d1099341f1734e460d17c4c689dcefaae8d172a"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Apr 27 22:33:16 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Mon Apr 27 22:33:16 2026 -0400"
      },
      "message": "[truetype/GX] Fix signed overflow. \n\nFixes #1423.\n\n* src/truetype/ttgxvar.c (tt_interpolate_deltas, tt_delta_interpolate):\nUse unsigned counters."
    },
    {
      "commit": "5d1099341f1734e460d17c4c689dcefaae8d172a",
      "tree": "2e21f67eee32bb60b2caa907623ad63bc23e05a7",
      "parents": [
        "c8c8b4b8a0d98bee005700d7c7698adb78e96f4f"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 09:38:34 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 09:38:34 2026 -0400"
      },
      "message": "[truetype] Reduce zone copying.\n\n* src/truetype/ttinterp.c (Compute_Point_Displacement): Reduce\nzone copying and return reference on demand only.\n(Ins_SHP, Ins_SHC, Ins_SHZ): Updated accordingly.\n"
    },
    {
      "commit": "c8c8b4b8a0d98bee005700d7c7698adb78e96f4f",
      "tree": "d842f9af6dd39758a7c0e131558143e2813dcef3",
      "parents": [
        "85c20f4e78e3443704ac00f2f957ef873b068bdd"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 08:36:25 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 08:36:25 2026 -0400"
      },
      "message": "[truetype] Simplify shift conditions.\n\n* src/truetype/ttinterp.c (Compute_Point_Displacement,\nIns_SHP, Ins_SHPIX): Use \u0027FT_UInt\" as point references.\n(Ins_SHC, Ins_SHZ): Ditto and simplify repeated condition.\n"
    },
    {
      "commit": "85c20f4e78e3443704ac00f2f957ef873b068bdd",
      "tree": "a96a4c009284550989e8c6834ffe6c0bb1afd042",
      "parents": [
        "6d0ae3ae94e4d77d5fb89fe92628300b347c7b64"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 08:32:13 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 08:32:13 2026 -0400"
      },
      "message": "* src/truetype/ttinterp.c (Move_Zp2_Point): Remove \u0027touch\u0027.\n\nUpdate all callers.\n"
    },
    {
      "commit": "6d0ae3ae94e4d77d5fb89fe92628300b347c7b64",
      "tree": "d68af7ec0abfaefd4954966856ddb1f64053ba70",
      "parents": [
        "7d600a022e1d813e85a8c94ffd395f6135872267"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 08:26:52 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Sun Apr 26 08:26:52 2026 -0400"
      },
      "message": "[truetype] Fix SHZ according to specifications.\n\nSHZ must shift the zone specified by its arguments. Previously,\nit was shifting zp2 instead.\n\n* src/truetype/ttinterp.c (Ins_SHZ): Rewrite to specifications.\n"
    },
    {
      "commit": "7d600a022e1d813e85a8c94ffd395f6135872267",
      "tree": "afbea17e64fd7b026bf724fdd65f925e5ba02aea",
      "parents": [
        "1803559c4ee407d0bcbf2a67dbe96690cee869d2"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu Apr 23 21:54:58 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Thu Apr 23 21:54:58 2026 -0400"
      },
      "message": "* src/truetype/ttinterp.c (Ins_SHZ): Fix the range limit (cont\u0027d).\n\nFixes\n    https://issues.oss-fuzz.com/issues/505900175\n"
    },
    {
      "commit": "1803559c4ee407d0bcbf2a67dbe96690cee869d2",
      "tree": "6d017ba3307c7b9ee658ebedc1915b11c1ed15a4",
      "parents": [
        "7974be74d8b5a2fbf99aa88f0461d1f80af51cee"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Apr 22 20:49:51 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Apr 22 20:49:51 2026 -0400"
      },
      "message": "* src/truetype/ttinterp.c (Ins_SHZ): Fix the range limit.\n\nFixes #1419 and #1420, as well as\n    https://issues.oss-fuzz.com/issues/499455833"
    },
    {
      "commit": "7974be74d8b5a2fbf99aa88f0461d1f80af51cee",
      "tree": "36b01e1608ca3f061b456001964e36176ddf4faa",
      "parents": [
        "f2b3f96901a320a9cda78ddbee306d5b320342d3"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Apr 22 16:04:14 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Apr 22 16:04:14 2026 -0400"
      },
      "message": "* src/truetype/ttinterp.c (Ins_IUP): Use unsigned counter.\n\nFixes #1421."
    },
    {
      "commit": "f2b3f96901a320a9cda78ddbee306d5b320342d3",
      "tree": "324c7230d0288371da59f1beef42251c073cb779",
      "parents": [
        "ce4105f9138a03e869c1815ee2326c1be0e4a37f"
      ],
      "author": {
        "name": "Yaroslav Kolomiiets",
        "email": "yarikos@gmail.com",
        "time": "Wed Apr 22 13:01:21 2026 +0000"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Wed Apr 22 09:01:21 2026 -0400"
      },
      "message": "[build] Add a Plan 9 port.\n\n* mkfile: Build instructions.\n* build/plan9/p9lib.h: Standard lib replacement.\n* build/plan9/README: Docs.\n"
    },
    {
      "commit": "ce4105f9138a03e869c1815ee2326c1be0e4a37f",
      "tree": "dcc99a69b5a9e286c470a4044f04b19c8050adab",
      "parents": [
        "867c296b908be5c783cad60defe5cf5b3be393f2"
      ],
      "author": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue Apr 21 19:52:37 2026 -0400"
      },
      "committer": {
        "name": "Alexei Podtelezhnikov",
        "email": "apodtele@gmail.com",
        "time": "Tue Apr 21 19:52:37 2026 -0400"
      },
      "message": "* include/freetype/fttypes.h: Do not include stddef.h.\n"
    },
    {
      "commit": "867c296b908be5c783cad60defe5cf5b3be393f2",
      "tree": "5cbe7275c90491f6e298157514c1dc1b3924adf2",
      "parents": [
        "0db9ecac025aecf1d270def1f2879e798bb58697"
      ],
      "author": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Apr 21 22:12:09 2026 +0200"
      },
      "committer": {
        "name": "Werner Lemberg",
        "email": "wl@gnu.org",
        "time": "Tue Apr 21 22:12:09 2026 +0200"
      },
      "message": "* src/sfnt/ttsbit.c (tt_face_load_sbix_image): Use `FT_MulDiv`.\n\nProblem reported as\n\n  https://issues.oss-fuzz.com/issues/505058300\n"
    }
  ],
  "next": "0db9ecac025aecf1d270def1f2879e798bb58697"
}
