# Copilot Review Instructions for TinyGLTF This document provides guidelines for reviewing code changes in the TinyGLTF repository. ## Memory Safety - **Buffer Overflows**: Check for proper bounds checking when accessing arrays, vectors, and buffers. Verify that buffer sizes are validated before read/write operations. - **Null Pointer Dereferences**: Ensure all pointers are checked for null before dereferencing, especially when handling optional glTF fields. - **Memory Leaks**: Verify proper resource management, including RAII patterns for file handles, image data, and dynamically allocated memory. - **Use-After-Free**: Check for proper lifetime management of objects, especially when dealing with callbacks and asynchronous operations. ## Error Handling - **File I/O**: Verify that all file operations have proper error checking and meaningful error messages. - **JSON Parsing**: Ensure JSON parsing errors are caught and reported with helpful context about the location and nature of the error. - **Resource Loading**: Check that failures in loading images, buffers, and other resources are properly handled and don't cause crashes. - **Error Propagation**: Verify that errors are properly propagated through the call stack with appropriate error messages. ## glTF 2.0 Specification Compliance - **Required Fields**: Ensure all required glTF fields are validated and present. - **Data Types**: Verify that data types match the glTF specification (e.g., component types, accessor types). - **Constraints**: Check that glTF constraints are enforced (e.g., valid ranges for enums, buffer stride requirements). - **Extensions**: Verify proper handling of glTF extensions and that unknown extensions are handled gracefully. - **Validation**: Ensure new features align with the glTF 2.0 specification from the Khronos Group. ## Cross-Platform Compatibility - **Windows**: Check for proper handling of Windows-specific issues (path separators, line endings, file operations). - **Linux**: Verify compatibility with various Linux distributions and compilers (GCC, Clang). - **macOS**: Ensure macOS-specific considerations are addressed (case-sensitive filesystems, Clang compatibility). - **Mobile Platforms**: Consider Android and iOS compatibility where applicable. - **Endianness**: Verify proper handling of byte order when reading binary data. - **Compiler Compatibility**: Ensure code compiles with C++11 standard and supported compilers (MSVC, GCC, Clang). ## Edge Cases in glTF Parsing - **Empty/Minimal Files**: Verify handling of minimal valid glTF files. - **Large Files**: Check for proper handling of large glTF files and buffers without memory exhaustion. - **Malformed Data**: Ensure graceful handling of malformed or invalid glTF data. - **Missing Optional Fields**: Verify correct behavior when optional glTF fields are absent. - **Edge Values**: Check handling of boundary values (e.g., maximum buffer sizes, extreme floating-point values). - **Base64 Encoding**: Verify proper handling of base64-encoded data URIs and invalid encodings. ## Backwards Compatibility - **API Changes**: Ensure public API changes maintain backwards compatibility or are properly deprecated. - **Breaking Changes**: Flag any breaking changes for major version updates and document migration paths. - **Binary Compatibility**: Consider ABI stability for header-only library changes. - **Default Behavior**: Verify that default behavior of existing functionality remains unchanged. ## Performance Considerations - **Parsing Performance**: Check for unnecessary copies, redundant allocations, and inefficient algorithms in parsing logic. - **Memory Usage**: Verify efficient memory usage, especially when loading large glTF files. - **I/O Operations**: Ensure efficient file reading and minimize unnecessary disk access. - **String Operations**: Check for efficient string handling (use of string_view, move semantics). - **STL Usage**: Verify appropriate use of STL containers and algorithms. ## Documentation - **Public API**: Ensure all public functions, classes, and methods have clear documentation comments. - **Parameters**: Verify that function parameters are documented, including expected ranges and constraints. - **Return Values**: Document return values and possible error conditions. - **Examples**: Check that complex features include usage examples. - **Changelog**: Verify that significant changes are documented in release notes or changelog. ## Testing - **Test Coverage**: Ensure new features include appropriate unit tests or integration tests. - **Edge Cases**: Verify that tests cover edge cases and error conditions. - **Cross-Platform Tests**: Check that tests run on all supported platforms. - **Regression Tests**: Ensure bug fixes include regression tests to prevent recurrence. - **Sample Files**: Verify that changes are tested with various valid and invalid glTF sample files. ## Code Style Consistency - **Header-Only Pattern**: Maintain the header-only library structure. - **Naming Conventions**: Follow existing naming conventions (CamelCase for types, snake_case for functions where applicable). - **Formatting**: Adhere to the existing code formatting style (check `.clang-format` if available). - **Include Guards**: Verify proper include guards and header organization. - **Namespace Usage**: Ensure proper use of the `tinygltf` namespace. - **Comments**: Maintain consistent comment style with existing code. - **C++11 Compliance**: Verify that code uses C++11 features appropriately and doesn't require newer standards unless specified. ## Additional Considerations - **Third-Party Dependencies**: Minimize new dependencies; prefer existing dependencies (json.hpp, stb_image). - **Warnings**: Ensure code compiles without warnings on supported compilers. - **const Correctness**: Verify proper use of const for parameters and methods. - **RAII**: Prefer RAII patterns for resource management over manual cleanup. - **noexcept**: Use noexcept appropriately for move constructors and move assignment operators.