)]}'
{
  "commit": "f34c5e5476829d9205e80b37fccc2bdfe97e1dab",
  "tree": "3ae51745be76703a9230684f9ad23a8e312fd6cb",
  "parents": [
    "5560602b1093a725d05f08b2ce58d156cf51cf4f"
  ],
  "author": {
    "name": "soma0212",
    "email": "soma@digiscrypt.com",
    "time": "Wed Sep 09 02:59:11 2026 +0530"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Sep 08 14:29:11 2026 -0700"
  },
  "message": "[mle] validate CSL Channel TLV in `HandleChildUpdateRequestOnParent()` (#13541)\n\nThis commit adds validation of the CSL Channel TLV received in a Child\nUpdate Request on the parent.\n\nPreviously, the 16-bit channel value from the TLV was truncated to\n`uint8_t` and stored on the `Child` without any range or channel page\ncheck, and then used as the radio channel for every CSL transmission\nto that child. This differs from the local `otLinkSetCslChannel()`\npath, which validates the channel through `Radio::IsCslChannelValid()`.\n\nKey changes:\n- Adds `CslChannelTlvValue`, derived from `ChannelTlvValue`, whose\n  `IsValid()` also accepts the special value of zero (CSL channel not\n  specified), and uses it in the `CslChannelTlv` definition so the\n  zero-or-valid check is encapsulated in the value type.\n- Updates `Mle::HandleChildUpdateRequestOnParent()` to switch on the\n  result of `Tlv::Find\u003cCslChannelTlv\u003e()`, consistent with how the\n  Timeout and Supervision Interval TLVs are parsed, rejecting the\n  request with `kErrorParse` if the TLV is malformed or the channel\n  is not valid.\n- Adds a unit test in `tests/unit/test_mle.cpp` that drives the handler\n  with crafted Child Update Requests covering zero, the channel range\n  boundaries, out-of-range values, and a value that would alias a\n  valid channel after truncation to `uint8_t`.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7f05cd6c76d88ba6577ae86a268743f15fe3c648",
      "old_mode": 33188,
      "old_path": "src/core/thread/mle.cpp",
      "new_id": "361cb6bbcf042a012bd90d21447ffa39695bc0f1",
      "new_mode": 33188,
      "new_path": "src/core/thread/mle.cpp"
    },
    {
      "type": "modify",
      "old_id": "c4cebd8c8bdd6adacafe7ebb9dfd649e63f1b0c1",
      "old_mode": 33188,
      "old_path": "src/core/thread/mle_ftd.cpp",
      "new_id": "4fe922518b7a377e340865d8800630740e1c8cfe",
      "new_mode": 33188,
      "new_path": "src/core/thread/mle_ftd.cpp"
    },
    {
      "type": "modify",
      "old_id": "572027cd945ff3b9cc5762f011643dc1d62c76a9",
      "old_mode": 33188,
      "old_path": "src/core/thread/mle_tlvs.cpp",
      "new_id": "3a7b2dca9bc18446b2bd3c3a2139188bcd3d0a4f",
      "new_mode": 33188,
      "new_path": "src/core/thread/mle_tlvs.cpp"
    },
    {
      "type": "modify",
      "old_id": "14f770f3594df072e9094339c1cf5f3540153559",
      "old_mode": 33188,
      "old_path": "src/core/thread/mle_tlvs.hpp",
      "new_id": "61c72d619383afda8bee40f89c4673b4e39d7f59",
      "new_mode": 33188,
      "new_path": "src/core/thread/mle_tlvs.hpp"
    },
    {
      "type": "modify",
      "old_id": "3e4f609350b01e285abc943c00506d800be3f5ca",
      "old_mode": 33188,
      "old_path": "tests/unit/test_mle.cpp",
      "new_id": "39e7e99d3a826a06e5de46010b83e5082ef85075",
      "new_mode": 33188,
      "new_path": "tests/unit/test_mle.cpp"
    }
  ]
}
