)]}'
{
  "commit": "d49c8ed65ab02a9e69d0c7fa47ff49649e4a76f7",
  "tree": "64a4cced8b40e8da6922b1526708b587bdafc781",
  "parents": [
    "0b8a9295abb9ef8332d4cdd3644280f0deccdca0"
  ],
  "author": {
    "name": "Rahul Bangar",
    "email": "rahulbn@fuchsia.infra.roller.google.com",
    "time": "Fri Feb 20 15:35:25 2026 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Fri Feb 20 15:37:29 2026 -0800"
  },
  "message": "[roll] Roll fuchsia [seriallistener][iomisc] Match strings split across multiple reads\n\nIt is possible for seriallistener to not match strings that are split\nacross multiple reads because each read creates a MatchingReader of its\nown, thereby losing the matched pattern between reads. The fix replaces\nMatchingReader and ReadUntilMatch* with Matcher for the reasons below.\n\nReadUntilMatch* functions are unsafe. Canceling their context doesn\u0027t\nguarantee that an ongoing Read will be interrupted. Instead, it leaks\nthe goroutine wrapping the Read which is masked only by the fact that\nthe process is likely to exit soon after leaking the goroutine.\n\nMore importantly, io.Reader doesn\u0027t impose any concurrency requirements\non implementations. It is possible to invoke an unsafe operation on the\nimplementation of an io.Reader while its Read operation is blocked. In\nparticular, a retried Read may skip data.\n\nFinally, MatchingReader in incorrect. It doesn\u0027t match patterns like\n\"AB\" when read in steps of \"A\", \"AB\".\n\nMatcher is simpler. It matches a single pattern and does so with an API\nthat allows multiple patterns to be matched in parallel. It returns a\nboolean to confirm that its pattern matched instead of making the user\ncompare the returned string. Tests are more straightforward.\n\nOriginal-Bug: 42085023\nOriginal-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1481137\nOriginal-Revision: 9e9d22ec1007df48cf2339abe11385bc7580cc64\nGitOrigin-RevId: 3e2555b6d247744ffef6fe21d58d8016fc13da29\nChange-Id: I23de50a9680d1edc4c52042a36faaee115260418\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e6d37df8ee8b9e20ab8f28d8ee0fef74be95fa39",
      "old_mode": 33188,
      "old_path": "stem",
      "new_id": "64224d795a9804c90ad0dade6d1251810e0e3ba2",
      "new_mode": 33188,
      "new_path": "stem"
    }
  ]
}
