)]}'
{
  "commit": "37867f63e497cfa4a4e182c43c2beef75307cdb2",
  "tree": "f6140cb0882a3acaaf332bf31f874476fb3d3164",
  "parents": [
    "0dd525f28d87d6aef1a20b9086dbe034411604c7"
  ],
  "author": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Wed Aug 26 06:25:54 2026 -0400"
  },
  "committer": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Thu Aug 27 18:29:13 2026 -0700"
  },
  "message": "unicode/norm: let any starter block composition in compose\n\nreorderBuffer.compose only refreshed s, the index of the last starter,\ninside the ii.combinesBackward() branch. A rune that does not combine\nbackward therefore left s pointing at whatever starter preceded it, and\nthe next backward-combining mark composed with that stale starter even\nthough an intervening starter should have blocked it.\n\nFor example, NFKC of U+16D68 U+FB01 U+113C2 U+0300 U+0316 decomposes to\nU+16D68 f i U+113C2 U+0316 U+0300. U+0316 does not combine backward, so\ns was left pointing at the \"i\" rather than at the starter U+113C2, and\nU+0300 composed with the \"i\" to give U+00EC, dropping a code point and\nproducing a string that is not canonically equivalent to the input.\n\nUpdate s on every iteration, as combineHangul already does.\n\nFixes golang/go#81001.\n\nChange-Id: I4d2332b4a0c44d60bd0961036391617a728c12df\nReviewed-on: https://go-review.googlesource.com/c/text/+/822081\nReviewed-by: David Chase \u003cdrchase@google.com\u003e\nLUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1ad6b5b79729fd5160ad1dddd22708deca915d98",
      "old_mode": 33188,
      "old_path": "unicode/norm/composition.go",
      "new_id": "e024e74b9f9266e7094e25225aa2c89d861b958d",
      "new_mode": 33188,
      "new_path": "unicode/norm/composition.go"
    },
    {
      "type": "modify",
      "old_id": "3bc034cc54843fec301a24f125750ab91b161821",
      "old_mode": 33188,
      "old_path": "unicode/norm/composition_test.go",
      "new_id": "5aab24533afa034bb8f282843ceb9b657e3b58fd",
      "new_mode": 33188,
      "new_path": "unicode/norm/composition_test.go"
    }
  ]
}
