Prevent duplicated key generation when serializing lights + RapidJSON backend. Fixes #420

This commit is contained in:
Syoyo Fujita 2023-06-04 05:45:24 +09:00
parent 350c296802
commit 147a00a601
3 changed files with 55852 additions and 1 deletions

View File

@ -197,6 +197,18 @@ if (!ret) {
* `TINYGLTF_USE_RAPIDJSON` : Use RapidJSON as a JSON parser/serializer. RapidJSON files are not included in TinyGLTF repo. Please set an include path to RapidJSON if you enable this feature.
* `TINYGLTF_USE_CPP14` : Use C++14 feature(requires C++14 compiler). This may give better performance than C++11.
### Wuffs image loader option(faster and secure JPEG/PNG deocoding)
You can use `wuffs` image loader to load JPEG and PNG in fast and securely.
(`stb_image` has some security issues, whereas `wuffs` is well fuzz tested)
Not that some uncommon JPEG format is unsupported in `wuffs` `std/jpeg` decoder.
* `TINYGLTF_USE_WUFFS_IMAGE_LOADER` : Use `wuffs` to load images. `stb_image` related stuff will be disabled.
* `TINYGLTF_NO_STB_IMAGE` supercedes `wuffs` macros. i.e. when `TINYGLTF_NO_STB_IMAGE` is defined, both `stb_image` and `wuffs` are disabled.
* `TINYGLTF_NO_WUFFS_IMPLEMENTATION` : Do not define `WUFFS_IMPLEMENTATION` inside `tiny_gltf.h`. Define this macro if you use `wuffs` in another C/C++ file.
## CMake options
You can add tinygltf using `add_subdirectory` feature.

View File

@ -6767,7 +6767,16 @@ void JsonAddMember(detail::json &o, const char *key, detail::json &&value) {
if (!o.IsObject()) {
o.SetObject();
}
o.AddMember(detail::json(key, detail::GetAllocator()), std::move(value), detail::GetAllocator());
// Issue 420.
// AddMember may create duplicated key, so use [] API when a key already exists.
// https://github.com/Tencent/rapidjson/issues/771#issuecomment-254386863
detail::json_const_iterator it;
if (detail::FindMember(o, key, it)) {
o[key] = std::move(value); // replace
} else {
o.AddMember(detail::json(key, detail::GetAllocator()), std::move(value), detail::GetAllocator());
}
#else
o[key] = std::move(value);
#endif

55830
wuffs-unsupported-snapshot.c Normal file

File diff suppressed because it is too large Load Diff