)]}'
{
  "commit": "42e02c7ebfc4ac74de7a0e4676268c887436f3b4",
  "tree": "ce112f1b356c8fe4ea2a1c257f7c9f63119371e2",
  "parents": [
    "386c165d54b38a17616a0ff98ba3339c93e8e35b"
  ],
  "author": {
    "name": "Javid Khan",
    "email": "dxbjavid@gmail.com",
    "time": "Wed Oct 14 07:06:18 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Oct 14 07:07:39 2026 -0700"
  },
  "message": "PR #2183: fix year overflow on leap-second carry in ParseCivilTime\n\nImported from GitHub PR https://github.com/abseil/abseil-cpp/pull/2183\n\nParseCivilTime parses the year on its own, normalises it into a small range around 2400 so the rest of the string can go through ParseTime, then rebuilds the result by adding the field-normalisation carry back onto the original year. The carry itself is small, but the year it is added to comes straight from the input, and at the largest representable year a trailing leap second rolls the value one past the maximum, so the addition overflows civil_year_t. It is reachable from untrusted text because the civil-time types parse flag and configuration strings through this path, and a value like 9223372036854775807-12-31T23:59:60 triggers it: a sanitiser build reports signed integer overflow at the carry, while an ordinary build silently wraps the year to the minimum and still returns success. I came across it while reading the carry handling that was added recently. Bounding the addition against the type limits and failing the parse when it would overflow leaves every normal year untouched and only rejects the few values that cannot be represented. I have added a regression case beside the existing carry test.\nMerge d9ba674d286e8bdd4614956842e1a30b00a0763b into 511e3f4b7ee50848e52dad3b054887e19def5ad8\n\nMerging this change closes #2183\n\nPiperOrigin-RevId: 999343915\nChange-Id: Ic18834bda53fae4aa21e1f17de5fbeac3eb95ae0\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a70424793371a812f20f542ff860661a18943b52",
      "old_mode": 33188,
      "old_path": "absl/time/civil_time.cc",
      "new_id": "76dbcafad966da2272ba042088f8894fd4d98a60",
      "new_mode": 33188,
      "new_path": "absl/time/civil_time.cc"
    },
    {
      "type": "modify",
      "old_id": "3f03fc1c5900042692509c82512e20aa0f4967a4",
      "old_mode": 33188,
      "old_path": "absl/time/civil_time_test.cc",
      "new_id": "53f52a508cffeb7bc552e633f2168afbf3bd755b",
      "new_mode": 33188,
      "new_path": "absl/time/civil_time_test.cc"
    }
  ]
}
