)]}'
{
  "commit": "c6f68ac5038b24a027b969dc1bf681a09f138da6",
  "tree": "8d353e7bd23d7651727527317c1a485a9e85e64a",
  "parents": [
    "85b88e9c89e26fd276621c637ea7adb6072a17db"
  ],
  "author": {
    "name": "Jeff Lenamon",
    "email": "85593689+lenamonj@users.noreply.github.com",
    "time": "Thu Aug 20 18:23:26 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Aug 20 15:23:26 2026 -0700"
  },
  "message": "fix: make the JSONCPP_USE_SECURE_MEMORY build compile and pass (#1709)\n\nBuilding with JSONCPP_USE_SECURE_MEMORY\u003d1 fails in three separate ways,\neach hidden behind the previous one. No CI job builds this configuration,\nwhich is why they have accumulated.\n\n1. allocator.h calls RtlSecureZeroMemory on the _WIN32 branch without\n   including \u003cwindows.h\u003e, so MSVC fails with error C3861. Removing that\n   branch lets the portable volatile std::fill_n path handle Windows.\n   The same fill was zeroing n bytes rather than n * sizeof(T), so for\n   any T wider than a char, most of the allocation was never wiped.\n\n2. jsontestrunner declares a std::string where the surrounding code uses\n   Json::String. The two are the same type only in default builds, so the\n   test runner does not compile under secure memory.\n\n3. CZString\u0027s move-assignment released a key with\n   releasePrefixedStringValue, but CZString keys come from\n   duplicateStringValue and carry no length prefix. The destructor\n   already uses the matching releaseStringValue. Under the default\n   allocator this mismatch is survivable; under SecureAllocator the\n   suite segfaults.\n\nVerified on MSVC 19.44, x64, C++17. Before: error C3861. With only the\nfirst two fixed: builds, then jsoncpp_test SEGFAULT. With all three:\nsecure build compiles and 3/3 ctest suites pass. The default build is\nunaffected and also 3/3.\n\nFixes #1399\n\nCo-authored-by: Jordan Bayles \u003cbayles.jordan@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "459c34c6163beca2b5a189a2f9c8a23167467c62",
      "old_mode": 33188,
      "old_path": "include/json/allocator.h",
      "new_id": "fa79d97f4defa4634a578bb3e4b569ac30270808",
      "new_mode": 33188,
      "new_path": "include/json/allocator.h"
    },
    {
      "type": "modify",
      "old_id": "ab6a80039e7401522d59a9024e15bb6259229716",
      "old_mode": 33188,
      "old_path": "src/jsontestrunner/main.cpp",
      "new_id": "e499276dcef107fa5ddcb3c9030b274bf9dff9be",
      "new_mode": 33188,
      "new_path": "src/jsontestrunner/main.cpp"
    },
    {
      "type": "modify",
      "old_id": "5823bd1d95006396d2d9c5282fff6d8bfbf3c006",
      "old_mode": 33188,
      "old_path": "src/lib_json/json_value.cpp",
      "new_id": "6b14c2deb82f9f47a3b82e14a089feef18f240a0",
      "new_mode": 33188,
      "new_path": "src/lib_json/json_value.cpp"
    },
    {
      "type": "modify",
      "old_id": "2e106bc5cb2a7ee8d43d8133c0f45b00351d6b07",
      "old_mode": 33188,
      "old_path": "src/test_lib_json/main.cpp",
      "new_id": "e09b87b8492c47ee6b7abb9edc3160cce6e4295e",
      "new_mode": 33188,
      "new_path": "src/test_lib_json/main.cpp"
    }
  ]
}
