Changes in 1.5.30 (6 January 2026)
* Fixed const-correctness of input arguments of Mat_VarCreateStruct
* Deprecated usage of Mat_VarCreateStruct in favor of Mat_VarCreateStruct2
  (CVE-2025-50343)
* Several other fixes, for example for memory leaks

Changes in 1.5.29 (10 November 2025)
* Fixed printing rank-1-variable in Mat_VarPrint
* Fixed array index out of bounds in Mat_VarPrint when printing UTF-8 character
  data (CVE-2025-2337)
* Fixed heap-based buffer overflow in strdup_vprintf (CVE-2025-2338)
* Changed Mat_VarPrint to print all values of rank-2-variable
* Confirmed compatibility with HDF5 v2.0.0
* autoconf: Updated config.sub and config.guess
* CMake: Enabled dependency resolution via Conan 2.x for CMake >= 3.24
* CMake: Enabled parallel testing
* CMake: Deprecated option MATIO_USE_CONAN:BOOL for Conan 1.x
* Several other fixes, for example for access violations in Mat_VarPrint

Changes in 1.5.28 (30 October 2024)
* Fixed bug writing MAT_T_INT8/MAT_T_UINT8 encoded character array to
  compressed v5 MAT file (regression of v1.5.12)
* Fixed bug reading all-zero sparse array of v4 MAT file (regression of v1.5.18)
* Updated C99 snprintf.c
* CMake: Enabled testing
* CMake: Fixed build with Visual Studio >= 17.10 and Conan 1.x
* Several other fixes, for example for access violations in Mat_VarPrint

Changes in 1.5.27 (20 April 2024)
* Fixed const-correctness of input arguments of API functions
* Fixed const-correctness of return type of Mat_GetDir
* Fixed bug duplicating function class (with deep copy) in Mat_VarDuplicate
* Fixed little endian detection for __aarch64__
* Fixed LFS support on MinGW 64-bit builds
* Fixed support of Unicode filenames on Windows
* Fixed detection of HDF5 version for UTF-8 based file name of HDF5 MAT file
* Fixed stack-based buffer overflow when reading (crafted) HDF5 MAT file
* Fixed build on Solaris
* Fixed build with Rust bindings and LLVM >= 16
* CMake: Fixed MinGW linker error with libc (regression of v1.5.24)
* CMake: Enabled static analysis with Cppcheck

Changes in 1.5.26 (12 November 2023)
* Fixed testsuite (regression of v1.5.25)

Changes in 1.5.25 (10 November 2023)
* Fixed reading struct array with null padded class name from HDF5 MAT file
* Fixed memory leak in Mat_VarFree for function class
* CMake: Silence MSVC compiler warnings

Changes in 1.5.24 (28 October 2023)
* Added predicated iteration API functions Mat_VarReadNextInfoPredicate and
  Mat_VarReadNextPredicate to speed-up reading variables from HDF5 MAT file
* Added new API function Mat_GetFileAccessMode to retrieve the file access mode
  of a MAT file
* Changed: Mat_VarDelete returns error if MAT file is opened in read-only mode
* Changed: Reduced memory foot-print of matvar_t.internal
* Fixed read performance of cell/struct array from HDF5 MAT file
* Fixed reference counting of HDF5 MAT file in Mat_VarDuplicate
* Fixed file access mode of created v4 MAT file
* Fixed read performance of Mat_GetDir for HDF5 MAT file
* Fixed bug reading struct array from v5 MAT file
* Fixed bug adding field to struct array of v5 MAT file
* Fixed heap-based buffer overflow when reading HDF5 MAT file
* Confirmed compatibility with HDF5 v1.14.x
* autoconf: Enabled system extensions
* autoconf: Fixed getopt_long check
* autoconf: Fixed pkg-config file for static linking
* CMake: Updated cmake-conan to version 0.18.1
* CMake: Fixed version comparison
* CMake: Fixed properties for CMake < 3.11
* CMake: Fixed linker error on OpenBSD
* CMake: Fixed checks of linker options
* Several other fixes, for example for memory leaks

Changes in 1.5.23 (31 March 2022)
* Updated cmake-conan to version 0.18.0
* Fixed testsuite (regression of v1.5.22)

Changes in 1.5.22 (25 March 2022)
* Added support for reading large MAT file
* Updated cmake-conan to version 0.17.0
* Fixed CMake build with Conan (MATIO_USE_CONAN:BOOL=ON)
* Fixed data type when reading 16-bit character data from HDF5 MAT file
* Fixed heap-based buffer overflows when reading (crafted) MAT file
  (CVE-2020-36428, CVE-2021-36977)
* Confirmed compatibility with HDF5 v1.13.0 and v1.13.1
* Several other fixes, for example for memory leaks (CVE-2022-1515)

Changes in 1.5.21 (25 March 2021)
* Fixed: Avoid usage of strlen when creating MAT_T_UTF8 encoded character array
  (regression of v1.5.20)
* Fixed reading of compression flag from HDF5 MAT file

Changes in 1.5.20 (21 March 2021)
* Added support for writing MAT_T_UTF8 encoded character array to HDF5 MAT file
  (by conversion to UTF-16 if in BMP)
* Updated cmake-conan to version 0.16.1
* Fixed bug with size_t arguments of logging function calls
* Fixed bug reading past EOF from (crafted) MAT file
* Fixed bug writing MAT_T_UTF8 encoded character array to v5 MAT file
* Fixed printing of MAT_T_UTF8 encoded character array
* Several other fixes, for example for memory leaks

Changes in 1.5.19 (6 November 2020)
* Fixed support for CMake (>= v3.19.0) build system
* Fixed bug reading variable from v4 MAT file (regression of v1.5.18)

Changes in 1.5.18 (17 September 2020)
* Added support of HDF5 v1.12.x
* Added support for UTF-8 encoded file name on Windows (MSVC)
  (requires HDF5 >= v1.11.6 for HDF5 MAT file)
* Added support for reading uncompressed v5 MAT file generated by SWAN
* Added error codes to public interface
* Added support for CMake build system
* Fixed read performance of numeric array from compressed v5 MAT file
* Fixed support for VS2005 and VS2008 (MSVC) (regression of v1.5.15)
* Fixed mktemp linker warning when using GNU linker
* Fixed bug writing struct array to uncompressed v5 MAT file on big endian
  architecture (regression of v1.5.10)
* Fixed bug writing cell array to uncompressed v5 MAT file on big endian architecture
* Fixed bug reading variable name from v4 MAT file (CVE-2019-17533)
* Fixed bug reading variable name from (crafted) compressed v5 MAT file
  (CVE-2020-19497)
* Fixed bug reading dimensions from (crafted) compressed v5 MAT file (CVE-2019-20017,
  CVE-2019-20018, CVE-2019-20020, CVE-2019-20052)

Changes in 1.5.17 (18 July 2019)
* Fixed bug reading struct array with packed field names from v5 MAT file
* Fixed bug reading past EOF from (crafted) uncompressed v5 MAT file

Changes in 1.5.16 (25 June 2019)
* Fixed error handling on integer addition/multiplication overflows (CVE-2019-13107)

Changes in 1.5.15 (29 March 2019)
* Added new API function Mat_GetHeader to retrieve header string of a MAT file
* Fixed integer multiplication overflows when calculating total number of
  elements from (crafted) MAT file
* Fixed bug reading character array from (compressed) v5 MAT file (regression
  of v1.5.14)
* Fixed number of variables for repeated calls of Mat_GetDir
* Fixed memory leak in Mat_VarFree for function class

Changes in 1.5.14 (11 March 2019)
* Deprecated usage of Mat_VarWriteInfo/Mat_VarWriteData in favor of
  Mat_VarWrite/Mat_VarWriteAppend
* Fixed bug reading dimensions from (crafted) compressed v5 MAT file (CVE-2019-9026,
  CVE-2019-9027, CVE-2019-9028, CVE-2019-9029, CVE-2019-9030, CVE-2019-9031, CVE-2019-9032,
  CVE-2019-9033, CVE-2019-9034, CVE-2019-9035, CVE-2019-9036, CVE-2019-9038)
* Fixed bug reading name (> 24 characters) from v5 MAT file (regression of v1.5.13)
* Fixed bug printing datatype in Mat_VarPrint (CVE-2019-9037)

Changes in 1.5.13 (22 October 2018)
* Fixed bug calculating size for zero-rank variables in Mat_VarGetSize
* Fixed bug reading dimensions from (crafted) v5 MAT file
* Fixed bug reading tag and class from (crafted) v5 MAT file
* Fixed integer multiplication overflows
* Fixed HDF5 compatibility in Mat_Open and Mat_Create for HDF5 > v1.10.1

Changes in 1.5.12 (7 March 2018)
* Updated Mat_VarWriteAppend: Added support to append a variable to a previously written
  struct array in HDF5 MAT file
* Fixed bug reading MAT_T_UINT16 encoded character array from HDF5 MAT file
* Fixed bug reading MAT_T_UTF16 encoded character array from compressed v5 MAT file
* Fixed bug writing MAT_T_UTF16 encoded character array to HDF5 MAT file
* Fixed buffer overflow in Mat_VarGetCells/Mat_VarGetStructs

Changes in 1.5.11 (22 October 2017)
* Added new API function Mat_VarWriteAppend to append a numeric array to a
  previously written variable in HDF5 MAT file
* Fixed bug calculating sizes of cell/struct array with empty cells/fields in Mat_VarGetSize
* Fixed bug writing cell/struct array with empty cells/fields to v5 MAT file
* Fixed bug writing cell/struct array with empty cells/fields to HDF5 MAT file
* Fixed read performance of cell/struct array with empty cells/fields from v5 MAT file
* Fixed read performance of numeric array from uncompressed v5 MAT file
* Fixed testsuite (if configured with the MATLAB application)
* Updated man pages

Changes in 1.5.10 (14 February 2017)
* Added new API function Mat_GetDir to retrieve all variable names of a MAT file
* Fixed performance of repeated calls to Mat_VarWrite (regression of v1.5.7)
* Fixed bugs reading (hyperslabs of) numeric array where the variable data type
  differs from the desired output data type
* Increased testsuite coverage

Changes in 1.5.9 (22 October 2016)
* Fixed resource leak when reading character array from HDF5 MAT file
* Fixed bug writing struct to HDF5 MAT file: Mat_VarWrite never returned 0 on success
* Fixed bug writing sparse logical array to HDF5 MAT file
* Fixed bug calculating array sizes of struct, cell, complex and sparse array in Mat_VarGetSize
* Fixed bug duplicating sparse array with empty data in Mat_VarDuplicate
* Fixed segmentation fault when reading compressed v5 MAT file with opaque class
* Updated support of HDF5 v1.10.x: No longer depend on deprecated v1.8.x symbols

Changes in 1.5.8 (30 June 2016)
* Fixed bug writing array to v4 MAT file on big endian architecture (regression of v1.5.7)

Changes in 1.5.7 (22 June 2016)
* Added support for MAT_T_UTF16 when reading character array from v5 MAT file
* Added support of HDF5 v1.10.x (with deprecated v1.8.x symbols exported)
* Added warning on unsupported character data types when reading v5 MAT file
* Added error check if variable already exists when writing to MAT file
* Fixed support of custom log functions: Moved log levels to the public interface
* Fixed bug creating v4 and v5 MAT file: Open in write+update mode
* Fixed bug creating v5 and HDF5 MAT file: Set BOF marker to 128
* Fixed bug in Mat_VarDelete: Rewind file before looping over variables
* Fixed bug writing cell array with empty struct fields to compressed v5 MAT file
* Fixed bug reading empty character array from HDF5 MAT file
* Fixed bug iterating through links in a group of HDF5 MAT file
* Fixed bug iterating on #subsystem# group of HDF5 MAT file
* Fixed compilation out of source directory
* Fixed C++ compilation on MinGW
* Restructured testsuite
* Fixed testsuite if hdf5 dependency is missing
* Increased testsuite coverage
* Various fixes for variable scopes that cause compilers to issue diagnostics

Changes in 1.5.6 (23 February 2016)
* Fixed bug writing array to v4 MAT file on big endian architecture
* Fixed bug writing header with more than 127 characters to v5 or HDF5 MAT file

Changes in 1.5.5 (19 February 2016)
* Added support of reading sparse array from v4 MAT file
* Added support of writing sparse array to v4 MAT file
* Added support of writing character array to v4 MAT file
* Added support of autogen.sh on Darwin
* Added missing Visual Studio project files for test_mat
* Added missing Visual Studio resource file
* Enabled C++ compilation
* Updated snprintf.c to C99 snprintf v1.1
* Increased testsuite coverage
* Fixed bug writing complex array to v4 MAT file
* Fixed bug writing cell containing a struct with fields but empty array to compressed v5 MAT file
* Fixed bug reading hyperslabs of cells and struct fields from compressed v5 MAT file (regression of v1.5.3)
* Fixed bug writing empty character array to uncompressed v5 MAT file
* Fixed bug reading cells and struct fields from HDF5 MAT file
* Fixed bug printing array dimensions in Mat_VarPrint on MinGW
* Fixed bug calculating array sizes of structs in Mat_VarGetSize
* Fixed bug duplicating sparse array in Mat_VarDuplicate
* Fixed testsuite if zlib/hdf5 dependencies are missing
* Several other fixes, especially for memory leaks

Changes in 1.5.3 (11 January 2016)
* Added support for writing numeric array to v4 MAT file
* Added Visual Studio project for test_mat
* Added new API functions Mat_CalcSingleSubscript2 and Mat_CalcSubscripts2 that
  work on size_t type
* Fixed memory consumption reading compressed v5 MAT file
* Fixed bug writing compressed v5 MAT file
* Fixed bug in Mat_VarReadNextInfo5 where freed variable was not set to NULL
* Fixed several bugs in Mat_VarDelete
* Fixed bug writing empty struct to HDF5 MAT file
* Fixed bug writing character array to HDF5 MAT file
* Fixed bug writing character array to compressed v5 MAT file
* Updated Visual Studio solution and project files to work with newer HDF5 and
  Visual Studio versions
* Various fixes for unused variables, unnecessary initializations, etc. that
  cause compilers to issue diagnostics
* Several other fixes, especially for memory leaks

Changes in 1.5.2 (31 July 2013)
* Added support for linear data read for v4 and HDF5 MAT file
* Fixed bug reading slices of variables in matdump
* Fixed feof calls so they compile on platforms that dereference the argument in a macro
* More robust checking that file is MAT file and eliminates some segmentation faults
* Various fixes for unused variables, unnecessary initializations, etc. that
  cause compilers to issue diagnostics
* Several other fixes

Changes in 1.5.1 (10 March 2013)
* Fixed bug writing compressed HDF5 file
* Fixed bug reading cell array elements written with a non-empty variable name
* Fixed bug writing complex sparse matrices as struct fields or cell elements to
  uncompressed v5 MAT file
* Fixed a number of potential issues identified via static analysis
* Fixed uninitialized pointers when creating structures through
  Mat_VarCreateStruct, and fix a bug in the struct API testsuite
* Fixed extended sparse support in v7.3 MAT file
* Added 64-bit integer support for v5 MAT file
* Added missing support for reading hyperslabs from HDF5 MAT file
* Added variable indexing notation support to matdump to display subsets of
  variables
* Added tests for extended sparse support in testsuite
* Added missing enumerations or default case in switch statements

Changes in 1.5.0 (15 April 2012)
* Changed licensing from the GNU Lesser General Public License to the BSD-2-Clause License
* Added support for reading/writing HDF5 MAT file
* Bug fixes for compressed variables that caused issues with matio reading them
* Upgraded dimensions in matvar_t structure to size_t enabling support for large arrays
* Added a testsuite

Changes in 1.3.2 (28 October 2006)
* Added support for writing compressed character classes, structures, cell arrays, and sparse arrays
* Added some tests to the test_mat program: write_compressed_cell, write_compressed_sparse
* Added 64-bit signed/unsigned integer support
* Fixed bugs in reading slabs of N-dimensional data

Changes in 1.3.1 (7 September 2006)
* Added some internal documentation to the library
* Defined two documentation groups public and internal
* Disabled the building of test programs by default and added a configure option to build them
* Fixed installation path of data and documentation
* Fixed bugs where file pointers were left open if allocating memory failed in Mat_Open and Mat_Create

Changes in 1.3.0 (30 June 2006)
* Cleaned out matio.h and made most preprocessor define's into enum's
* Moved complex arrays from single pointer with real part followed by imaginary
  part to a struct with a pointer to the real part and a pointer to the
  imaginary part (Previous implementation was just plain ignorant)
* Changed v4 MAT file code from MAT_V4 to MAT_FT_MAT4 to match the v5 identifier
* Added function Mat_VarCalloc to allocate and initialize all fields of the
  matvar_t structure
Bug Fixes in 1.3.0 (30 June 2006)
* WriteCompressedData did not initialize the data tag (data_tag variable)
* WriteStructField wrote the array name tag as a 2 byte integer followed by 2
  padding bytes. Correct implementation writes the array name tag as a 4 byte
  integer.
* Write5 wrote the array name tag as a 2 byte integer followed by 2
  padding bytes when the name was more than 4 characters. Correct
  implementation writes the array name tag as a 4 byte integer.
* Write5 had a hard-coded uncompressed variable size of 448 when writing
  compressed data.
* WriteInfo5 wrote the array name tag as a 2 byte integer followed by 2
  padding bytes when the name was more than 4 characters. Correct
  implementation writes the array name tag as a 4 byte integer.
* Mat_Create wrote the endian sequence incorrectly.
* Mat_VarCreate set the number of bytes incorrectly for structures.
* Mat_VarCreate fixed the data size of the character class to 1. That didn't
  allow for multi-byte characters.

Changes in 1.1.6 (20 March 2006)
* Added sparse class to compressed variable
Bug Fixes in 1.1.6 (20 March 2006)
* Fixed release bug in reading double class data
* Fixed various compressed variable writing bugs
* Fixed a bug in Mat_VarCreate for sparse variables

Changes in 1.1.4 (9 February 2006)
* Changed licensing from the GNU General Public License to the GNU Lesser
  General Public License
* Added support for reading numeric v4 MAT file
* Added support for sparse datatypes other than double. Although MATLAB does
  not support these types, other free software does.
* Writing compressed variables is supported for numeric arrays. Future versions
  will implement character, sparse, cell, and structure arrays.
* A Fortran 90/95 interface has been incorporated. Not all functions are
  implemented yet, but more will come and it is at least functional now.
  Hopefully feedback will help guide the Fortran interface development.
* Replaced preprocessor defines for types, classes, etc. with enum's.
Bug Fixes in 1.1.4 (9 January 2006)
* Mat_VarReadData did not handle complex data.
