)]}'
{
  "commit": "ce757bee45b84a42885af06897e378247ccecb94",
  "tree": "601d4820ce2687e596e9cc827f44b0ee9077b7d9",
  "parents": [
    "02e903a847fb30366491007b45cf8e90ac871114"
  ],
  "author": {
    "name": "Jordan Bayles",
    "email": "bayles.jordan@gmail.com",
    "time": "Sun Mar 15 22:51:09 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sun Mar 15 22:51:09 2026 -0700"
  },
  "message": "Fix use-after-free in Reader::parse(std::istream\u0026) (#1665)\n\nThe istream overload stored the document in a local String then\npassed raw pointers into it to parse(const char*, const char*),\nwhich kept those pointers in begin_/end_. After parse() returned\nthe local String was destroyed, leaving begin_/end_ dangling.\nAny subsequent call to getFormattedErrorMessages() would then\nread freed memory.\n\nFix by reading the stream into the member document_ instead, matching\nthe behavior of parse(const std::string\u0026).\n\nAlso document the lifetime requirement on parse(const char*, const\nchar*): the caller\u0027s buffer must outlive the Reader if error-reporting\nmethods are used after parsing.\n\nFixes #1623",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d745378fc69d964138df53a230da997fb6151455",
      "old_mode": 33188,
      "old_path": "include/json/reader.h",
      "new_id": "7aa2271886822e97ec9d6405270ed241b1c02ff0",
      "new_mode": 33188,
      "new_path": "include/json/reader.h"
    },
    {
      "type": "modify",
      "old_id": "3faa2028f0c0eac81fda2b96215ba089a460c2cf",
      "old_mode": 33188,
      "old_path": "src/lib_json/json_reader.cpp",
      "new_id": "83743f73b4009d3c39f85e2a6f7c53eaab318e09",
      "new_mode": 33188,
      "new_path": "src/lib_json/json_reader.cpp"
    }
  ]
}
