mirror of
https://github.com/nlohmann/json.git
synced 2026-11-13 15:35:23 +00:00
The seven serializer helpers marked JSON_HEDLEY_ALWAYS_INLINE are inlined at -O0 as well, and GCC and Clang give every inlined copy its own stack slots there. That made the recursive frame of dump_container() 2304 bytes with Clang 21 (2048 with GCC 16), against 480 bytes in 3.12.0, so dump() of a value nested beyond the default recursion depth limit needed 288 KiB of stack in an unoptimized build and crashed in a 128 KiB musl thread. Define JSON_INTERNAL_SERIALIZER_INLINE as JSON_HEDLEY_ALWAYS_INLINE when __OPTIMIZE__ (or _MSC_VER) is defined and as plain inline otherwise, and use it for these helpers. The frame drops to 320 bytes and dump() needs 48 KiB at the default limit. The -O2 object code is unchanged with Clang 21 and GCC 16. Update the stack tables in json_recursion_depth_limit.md and untrusted_input.md: copying and conversion are now the most demanding operations at -O0. Fixes #6116. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
Documentation
Generate documentation
Note on documentation: The source files contain links to the online documentation at https://json.nlohmann.me.
This URL provides the most recent documentation and also applies to previous versions. Documentation for deprecated
functions is not removed; instead, it is marked as deprecated.
If you want to view the documentation for a specific tag or commit hash, you can generate it locally as follows (example
using tag v3.12.0):
git clone https://github.com/nlohmann/json.git
cd json
git checkout v3.12.0
make install_venv serve -C docs/mkdocs
Open http://127.0.0.1:8000/ in your browser. Replace any URL in the source code that points to
https://json.nlohmann.me with http://127.0.0.1:8000 to view the documentation for the selected tag or commit hash.