)]}'
{
  "commit": "b98ffb1fbd02eeaac71ed4115e209cfae208acff",
  "tree": "fe4da2288cf1952d0bd5812317e7e2ed5f20d7e3",
  "parents": [
    "8c59a6d47a5b7a11cdca174bf9d268c591dec98a"
  ],
  "author": {
    "name": "Behdad Esfahbod",
    "email": "behdad@behdad.org",
    "time": "Mon Oct 19 19:16:51 2026 -0600"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Oct 19 19:16:51 2026 -0600"
  },
  "message": "[cache] Reject out-of-range keys on reads (#6419)\n\n* [cache] Reject out-of-range keys on reads\n\nAn empty entry can match an out-of-range key when the packed cache\nentry leaves storage bits unused. In the 256-entry binary coverage\ncache this reports glyph IDs 32512-32767 as NOT_COVERED, skipping\nContext/ChainContext format 2 substitutions and positioning.\n\nApply the same key range check in get() as set(). Add regression\ncoverage for spare-bit and full-width entries across all three\nstorage sizes, with and without atomics.\n\nThe new cache test fails before the fix and passes afterward, also\nwith HB_TINY. All 28 GSUB/GPOS Context/ChainContext boundary cases\npass. meson test -C build: 272 passed, 1 skipped, 0 failed.\n\nFixes: https://github.com/harfbuzz/harfbuzz/issues/6418\nAssisted-by: OpenAI Codex\n\n* [cache] Combine cache miss checks into one branch\n\nFold the key range check into the existing miss condition using\nbitwise operations. XOR the stored and queried tags so their\nmismatch can be combined directly with key overflow and the empty\nentry check.\n\nUse a scalar empty-entry constant rather than casting through\nitem_t, which creates temporary atomic objects in GCC builds.\nThe binary, mapping, and cmap lookup probes now each have one\nconditional branch with GCC 15 and Clang 21 at -O2 on x86-64,\ncompared with two or three in the initial fix.\n\nTesting: meson test -C build: 272 passed, 1 skipped, 0 failed.\nAll 28 GSUB/GPOS Context/ChainContext boundary cases pass. The cache\nregression also passes with Clang and with HB_TINY.\n\nAssisted-by: OpenAI Codex",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9ac4ab4c0c8e8a98c9ad8690e93b04c56c6a9d6d",
      "old_mode": 33188,
      "old_path": "src/hb-cache.hh",
      "new_id": "84df35ebd575165d3df24471556e572b8ae6d415",
      "new_mode": 33188,
      "new_path": "src/hb-cache.hh"
    },
    {
      "type": "modify",
      "old_id": "78485485cfbdf89c1049d983a2da1a683981a70e",
      "old_mode": 33188,
      "old_path": "src/meson.build",
      "new_id": "95f64d78f95219fa7b38afd90b811c6d3f9c0cd6",
      "new_mode": 33188,
      "new_path": "src/meson.build"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ff430d18af44d3b9f89555703b6ef07bc0cb0520",
      "new_mode": 33188,
      "new_path": "src/test-cache.cc"
    }
  ]
}
