Repository navigation
What's Changed
The Details
Harden the parser; add an error API; add web builds and a sample viewer; bump version to 1.1.0
That was quite a lot I've been dragging my feet on.
Security and memory safety:
-
Fix discovered memory-safety bugs: signed-overflow in the warp grid expansion, an out-of-bounds read on negative keyframe indices, NULL+0 pointer arithmetic when the blend-key table is empty, NULL derefs on empty art-mesh bindings and missing key_count reads at the blend-window boundary, and an index underflow in psm__valid_range.
-
Improved fuzzing verification: PSM_DEBUG_MALLOC build mode that uses
mallocfor every model field.
Public API:
-
Add per-model csmGetLastError / csmGetErrorString; record error codes in the MOC3 header's padding, and expose csmGetMocError so applications can receive detailed failure status.
-
Add csmGetExtendedVersionString() with embedded git hash to query the exact library build.
-
Misc. correctness fixes: propagate color to opacity-0 meshes and stop the v5.3 extended-modes bit masking constant-mode bits.
Style / housekeeping:
-
.clang-format for the library (BSD-KNF) and samples/viewer (raylib layout), a clang-format pre-commit hook, make format/format-check targets, and a CI check.
-
Line wrapping, standardizing on
boolfor all booleans, remove VLAs, rename many symbols for consistency, and more!
Sample viewer:
- Implement a sample MOC3 viewer (both v5 and v6 ABI support) using Raylib. Supports all blend modes from v6.
WASM port:
- Web/WASM drop-in Live2DCubismCore.js for both v5 and v6.
Build:
-
Makefile rewrite with per-OS shared rules and a proper platform matrix. WASM support also added.
-
Bundle now generated from a template (src/bundle.c.in) instead of manually by a script.
-
CMake build system added for cross-compilation. This should be easier to build on plain Windows.
CI:
- Misc improvements: cross-build is skipped on v* tag pushes (the release job rebuilds the matrix itself), and the release job verifies the tag matches PSM_TRUE_VERSION in the header before building.
Full Changelog: v1.0.1...v1.1.0