)]}'
{
  "commit": "b3a0002f3712c6fdef7db452db3d2433a2ddb70b",
  "tree": "b9f79ad5337bf6ef071b2a22e6769ad3b6507033",
  "parents": [
    "a2fdf71161790af959a4311f49a88ff0c46abc4a"
  ],
  "author": {
    "name": "ColinLee",
    "email": "shuolin_l@163.com",
    "time": "Mon Jul 27 18:40:56 2026 +0800"
  },
  "committer": {
    "name": "ColinLee",
    "email": "shuolin_l@163.com",
    "time": "Mon Jul 27 18:40:56 2026 +0800"
  },
  "message": "fix(cpp): fix memory leaks and null dereference crashes\n\n- ChunkReader::reset() now clears wrapped buffer pointer after free to\n  prevent double-free in subsequent destroy()\n- ChunkReader::load_by_meta() now frees allocated buffer and returns\n  early on read failure, preventing memory leak\n- LZ4Compressor::compress() now frees compressed_buf_ on both\n  LZ4_compress_default failure and mem_realloc failure paths\n- C wrapper string getters (by_name/by_index) now null-check the\n  return value of get_value\u003cString*\u003e() before dereferencing,\n  preventing crash on non-STRING/TEXT/BLOB column types\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0f19ce1796d06adb6ebd5f907015ee421ac5ee2f",
      "old_mode": 33188,
      "old_path": "cpp/src/compress/lz4_compressor.cc",
      "new_id": "a7333f246495fb519b4eee3e5f5ad5aaaa18e48d",
      "new_mode": 33188,
      "new_path": "cpp/src/compress/lz4_compressor.cc"
    },
    {
      "type": "modify",
      "old_id": "4ec70e00bb740062206880f961e943800737c68d",
      "old_mode": 33188,
      "old_path": "cpp/src/cwrapper/tsfile_cwrapper.cc",
      "new_id": "ffe2f59b62635da2fab468bfd7104fd157b2db5e",
      "new_mode": 33188,
      "new_path": "cpp/src/cwrapper/tsfile_cwrapper.cc"
    },
    {
      "type": "modify",
      "old_id": "6b3d853d94a3131b5096356a0a4bb0e2040ff357",
      "old_mode": 33188,
      "old_path": "cpp/src/reader/chunk_reader.cc",
      "new_id": "f127ee2ee811d0f9cd9eafabbb6b0a8aad09a4c0",
      "new_mode": 33188,
      "new_path": "cpp/src/reader/chunk_reader.cc"
    }
  ]
}
