)]}'
{
  "commit": "2f4e2d3e5ea2a6868a6711be0b6c327d652e643f",
  "tree": "d0cc2ab83682bbe1a7618f674b1c82e01d7aaeb6",
  "parents": [
    "dccf15308405989b93b607bdbfd20102cc67a619"
  ],
  "author": {
    "name": "Robert Lazarski",
    "email": "robertlazarski@gmail.com",
    "time": "Tue Aug 11 07:41:59 2026 -1000"
  },
  "committer": {
    "name": "Robert Lazarski",
    "email": "robertlazarski@gmail.com",
    "time": "Tue Aug 11 08:48:47 2026 -1000"
  },
  "message": "Cover IPv6 response endpoints and record how the body ceilings measure\n\nNeither gap that had to be fixed in the C implementation exists here, but for\nreasons worth writing down rather than rediscovering.\n\nThe body ceilings measure bytes actually read, not a declared Content-Length,\nso a chunked body is bounded on the same terms as a declared one. The\nform-urlencoded builder wraps the stream; the multipart path relies on\ncommons-fileupload2, which pairs its Content-Length fast path with a streaming\nguard. SECURITY.md now says so, because the reverse is the easy mistake to make\nwhen adding a limit: screening the header before the read leaves\nTransfer-Encoding: chunked unbounded, which declares no length.\n\nAddress classification is address-family agnostic because it defers to\nInetAddress rather than parsing hosts, and URI.getHost keeps the brackets in a\nform InetAddress accepts. The one part not inherited is fc00::/7, since\nisSiteLocalAddress answers only for the deprecated fec0::/10; isUniqueLocalIPv6\nalready covered it.\n\nWhat was missing was any test at all: seventeen cases, none of them IPv6, so\nthe behaviour was right and unverified and a regression would have been silent.\nThree tests now cover the always-refused set, the IPv4-mapped metadata address,\nand loopback and unique-local under the private-network switch, plus a global\naddress as the control so the suite cannot pass by refusing IPv6 wholesale.\nRemoving the isUniqueLocalIPv6 clause fails exactly one of them; 20 pass with\nit in place.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ed4b7fdf6f49ec313e4467ba5f7fdbbb163223f4",
      "old_mode": 33188,
      "old_path": "SECURITY.md",
      "new_id": "6b94acc16a50b476aa0b30748b9d01ee11190caa",
      "new_mode": 33188,
      "new_path": "SECURITY.md"
    },
    {
      "type": "modify",
      "old_id": "67522a170a98036cf6be71d09b486b02766ed5f8",
      "old_mode": 33188,
      "old_path": "modules/kernel/test/org/apache/axis2/addressing/AddressingResponseEndpointPolicyTest.java",
      "new_id": "8e3773c6ce07217134817af83b8fdaf7d54a3e8d",
      "new_mode": 33188,
      "new_path": "modules/kernel/test/org/apache/axis2/addressing/AddressingResponseEndpointPolicyTest.java"
    }
  ]
}
