-----------------------
2.20 Ongoing
-----------------------

-----------------------
2.19.1 hot fix
-----------------------
Fixed sonames generation when using autotools
Recovered an undocumented memory write feature lost because a "security" report.
Fixed documentation pointers on visual studio project.

-----------------------
2.19 Featured release
-----------------------
CMake build system. Thanks to Vlad Erium for the initial implementation and kmilos for improvements. 
Large files support to use profiles up to 4Gb
Black point compensation works on multi-channel profiles
Added more test platforms/architectures in GitHub tests, Cygwin and MSYS are now fully checked.
jpgicc banner is not shown on normal operation, only when help is requested.
Added a way to access internal transform pipelines. For read only.
Add a way to retrieve the CMM signature
Added extra checks on postscript undocumented functions
Added guard on integer overflow when reading .cube files
Added unneeded checks as a try to get rid of spam reports about "vulnerabilities" that are not real.
Utility program names generated by Visual Studio 2026 are now same as all other platforms.
Creating an output profile by cmsTransform2DeviceLink does not propagate correctly the colorant table. Fixed.
Added some profile class definitions from iccMAX
Deprecated uint16 and uint32 types removed from tifdiff

-----------------------
2.18 Maintenance release
-----------------------
Add an extra check for completeness only.
Fix a signed integer overflow which could trigger a FPE_INTOVF
Fix Microsoft'2 MHC2 private tag
Added projects for XCode 26 & Visual Studio 2026
Added documentation for PCS illuminants and chromatic adaptation
Check for a possible out-of-bounds in softproofing transforms when using cmsCreateExtendedTransform
Fix for a out-of-bound read,  issue #522
Add an extra check for out-of-bounds read when misusing a support function
avoid divide by zero, special case from spec. notes on CAM02
Fix CGATS parser bug when number has a "+" sign
Fix a typo when handling a special case for BPC
Fixed a loss of precision when Lab16 is used as input color space on integer transforms
Fixes hypotetical corrupted pointer in non-happy path. Cannot happen in real world
Fix a theoretical memory leak.
Add support of localized descriptions in v2 profiles for MacOS
Mark some tables as const
Make the param of cmsCreateLab4Profile() to refer to the media white instead of the illuminant
fix a warning in unit tests
Remove redundant check. Fixes #497
Update autotools
fix plugins soname + add oklab to transicc (experimental)
meson: ability to disable .so.version libraries
Fix black point detection when using darker colorant.
testcms2.c: Fix incorrect string comparisons
Fix CICp tag size.
Fix broken linkicc
meson: Bump minimum Meson version to 0.52 for visibility:hidden
meson: Disable unused fs import
Add a guard against a wrong use of flags
Fix for #469 heap buffer overflow on convert_utf16_to_utf32()

-----------------------
2.17 Maintenance release
-----------------------
Add fuzzers foundation. Many thanks to Amir Montazery and Open Source Technology Improvement Fund (ostif.org), Google, for funding that. 
Add ability to disable building tests in meson
Fixed gamut warning not working on certain conditions
Mac sequoia added to test beds
Add the possibility of duplicating a NULL context for cloning defaults.
Small cleanup of CGATS parser
Change computation of profile ID to follow actual ICC spec (yes, they changed the spec!)
Allow to apply color management on memory blocks > 4Gb
Get rid of samples on meson compilation
Increase coverage of premultiplied alpha.
Bug fixing and cosmetical work on sources.

-----------------------
2.16 Featured release
-----------------------
New import .CUBE files as RGB devicelinks
New Read/Write MHC2 tags for Windows GPU access
New Support for UTF8 on multilocalized unicode functions
New Support for OkLab color space, built-in and formatter.
Improved floating point transforms float -> integer are now honored as float
Improved MSYS2, mingw is now supported
Improved proferred CMM, platform and creator now survives profile edition.
Fixed tificc now can deal with Lab TIFF
Fixed code can now be compiled by a C++17 compiler, "register" keyword use detected at compile time.
Fixed Reverted postcript creation that corrupted some interpreters.

-----------------------
2.15 Maintenance release
-----------------------
New MESON build system, many thanks to amispark and Lovell Fuller for bringing this.       
Fixed a bug that caused memory corruption on colord
cmsReadRawTag can read portions  of tags again. Removing this caused colord to segfault when dumping profiles
Added more checks based of fuzzer discoveries.
MSYS2 can now compile lcms2
Checked on Apple Silicon M1 and M2 
Fixed a bug of fastfloat plug-in that affected Krita CMYK color selector

-----------------------
2.14 Featured release
-----------------------
lcms2 now implements ICC specification 4.4
New multi-threaded plug-in
several fixes to keep fuzzers happy
Remove check on DLL when CMS_NO_REGISTER_KEYWORD is used 
Added more validation against broken profiles
Add more help to several tools

-----------------------
2.13.1 Hot fix
-----------------------
Fix for pure white going gray in grayscale transforms.

-----------------------
2.13 Featured release
-----------------------
Added support for premultiplied alpha
tifficc can now handle alpha channels, both unassociated and premultiplied
Better documentation
CGATS parser can now deal with very long strings
Added Projects for Visual Studio 2020
Travis CI discontinued, GitHub actions used instead
Added a very preliminar meson build script (thanks to xclaesse)
Added ARM64 target to visual studio 2019 (thanks to gaborkertesz-linaro)
Added thread safe code to get time
Added automatic linear space detection 
Added cmsGetStageContextID function
Added cmsDetectRGBProfileGamma function
configure now accepts --without-fastfloat to turn plugin off
autogen.sh has now a --distclean toggle to get rid of all autotools generated files
Checked to work on STM32 Cortex-A, Cortex-M families
Bug & typos fixing (thanks to many reporters and contributors)

-----------------------
2.12 Maintenance release
-----------------------
Added new built-in sigmoidal tone curve
Added XCode 12 project
Added support for multichannel input up to 15 channels
Fix LUT8 write matrix
Fix version mess on 10/11
Fix tools & samples xgetopt
Fix warnings on different function pointers
Fix matlab MEX compilation
plugin: cleanup and better SSE detection
plugin: add lab to any on float
plugin: it can now be compiled as C++
recover PDF documentation, but try to keep it under a reasonable size.
Prevent a rare but possible out-of-bounds read in postscript generator
Remove unused variables

-----------------------
2.11 Maintenance release
-----------------------
Fixed __cpuid() on fast float plugin to allow gnu gcc
Fixed copy alpha bounds check
Fixed data race condition on contexts pool
Fixed LUT16 write matrix on multichannel V2 profiles

-----------------------
2.10 Featured release
-----------------------
Added a compilation toggle to remove "register" keyword in API. 
Previously commercial, fast_float plug-in is now released as open source under GPL3 license.
MD5 functions are now accessible through plug-in API.
Added support for Visual Studio 2019
Bug fixing.


-----------------------
2.9 Maintenance release
-----------------------
Several fixes related with security, and therefore not detailed here.
C++ compiles now without warnings
Added OSX and clang in travis
Added a travis-ci test matrix for many compilers and OS. Thanks to Thomas Weber (debian) for this great improvement.
testbed can now work with dynamic versions of library 
Fixed wrong planar formatters regarding linestride interpretation

-----------------------
2.8 Featured release
-----------------------

Changed ChangeLog direction
Fixed many typos in comments, thanks to Stefan Weil for doing that.
Fixed localization bug, added a new test case crayons.icc thanks to Richard Hughes for providing the profile. 
Fixed a bug in optimizer that made some formats (i.e, bits planar) unavailable
Fixed misalignment problems on Alpha. The compiler does not align strings, and accessing begin of string as a uint16 makes code to fail.
Added some extra checks to the tools and examples.
Fixed a bug that prevented to read luminance tag
BIG amount of functionality contributed/Sponsored  by Alien Skin Software: TransformStride, copyAlpha, performance plug-ins. Fixes some warnings as well.
Added an extra _ to _stdcall to make it more portable
Fixed a bug in transicc for named color profiles
Fixed several compiler warnings
Added support for Visual Studio 2015
Fixed for XCODE project

-----------------------
2.7 Maintenance release
-----------------------

Added a version retrieval function 
Added an option in transicc for working in bounded mode
Fixed wrong handling of extra channels in some formatters.
Added a project for VS2013
Added license for iccjpeg.c
New project for mac
Added a global optimization that merges consecutive matrices in pipelines. Fixes loss of precision in some transforms
Added a flag  to clip negative values in unbounded transforms (only gray, rgb, cmyk)
Move unused var suppresor before the `return` statements.
Remove dead code.
Add missing comma in CGATS parser    
utils/jpgicc/iccjpeg.c: Fix check if unsigned variable 'total_length'… …
Some maintenance fixes
Remove unused vcproj files
Added a function to retrieve the iohandler of a given profile object
Added a safety check on named color lists
Fixed a macro clash on SNONE. 
Fixed a possible segmentation fault in a non-happy path

-----------------------
2.6 Featured release
-----------------------

Added pthread dependency. From now lcms supports multithreading
Fix for delete tag memory corruption
Added directories for tiff, jpeg in configure script
New locking plug-in, from Artifex
Big revamp on Contexts, from Artifex
Fixed memory leaks on error handling
Changed endianness detection for PowerPC
Added a way to retrieve matrix shaper always, no matter LUT is present
Fixed a bug in PCS/Colorspace order when reading V2 Lab devicelinks
Fixed some indexing out of bounds in floating point interpolation
Fixed a double free in recovering from a previous error in default intent handler.

-----------------------
2.5 Maintenance release
-----------------------

Added some checks for non-happy path, mostly failing mallocs
Transform2Devicelink now keeps white point when guessing deviceclass is enabled
Rendering intent used when creating the transform is now propagated to profile header in cmsTransform2Devicelink. This is because 7.2.15 in spec 4.3
Added a simple project for cppcheck
Added support for VS2012
Remove spurious tabs added by git merge of pull request
Fixed a bug in parametric curves
Added some fixes from XhmikosR
Added TIFF Lab16 handling on tifficc
More changes from Artifex
Added identity curves support for write V2 LUT 
Added a way to read the profile creator from header
Added a reference for Mac MLU tag
Fixed devicelink generation for 8 bits
Several minor issues found by cppcheck
Several improvements in cgats parser.
Fixed some bugs on floating point curves.
Fixed a bug on  big endian platforms not supporting uint64 or long long.
Added error descriptions on cmsSmoothToneCurve 
Added new cmsPlugInTHR() and fixed some race conditions (thanks to Artifex)
update black point detection algorithm to reflect ICC changes
Fixed some 64 bit warnings on size_t to uint32 conversions
Fixed a multithead bug on optimization (StageDEF)
RGB profiles using same tone curves for several channels are storing now only one copy of the curve (saves space)
User defined parametric curves can now be saved in ICC profiles.

--------------------
2.4 Featured release
--------------------

Added a check for maximum input channels
Fixed an uninitialized read on PatchLUT
Fixed a bug in XYZ floating point PCS
added half float variants (ABGR and so)
Added formatter resolution after xform optimization plugin
Fixed a bug in transicc when clot tables are present
Added a conditional compilatio flag for "half" support
Fixed a bug on named color profiles.
Fixed a typo on tificc and jpgicc names, thanks to Elle Stone for reporting.
Added half float support
Increased security checks, thanks to Mateusz Jurczyk, from Google.
Fixed a bug on IT8 reading of negative numbers.
Fixed a bug on ending zero when saving a IT8 to memory
Internal stage structs are now accessible through plug-in API
Added a new plug-in type
Added getPipelineContextID
Fixed a bug in pipeline duplication
gamma 1.0 can now operate in unbounded mode
Exposed internal overview table for tone curves
Added a new plug in entry for full transform
Added support for transforms on planar data with different stride
Added black point detection algorithm from Adobe paper
Fixed a bug in black preservation checking
Added performance improvements from several contributors, mostly Artifex
Fixed uint64 to work in systems without long long native type
Fixed a bug in the named color devicelink generation

-----------------------
2.3 Maintenance release
-----------------------

Added compatibility with Argyll's CGATS parser
Updated to ICC spec 4.3
Adding a memory alignment macro for CGATS parser
Fixed a bug on the range of data in transicc, when colorant tag is specified
Fixed Absolute colorimetric intent issues
Fixed encoding for floating point tags in Lab/XYZ 
Fixed a 0 byte allocation issue in _cmsCreateSubAllocChunk

-----------------------
2.2 Maintenance release
-----------------------

Pascal unit now is supported by Free Pascal Compiler
Fixed a bug on ReadRAWtag 
Added dictionary metatag support
Fixed a bug in black preservation and slightly non-monotonic curves
Added named color functionality
Fixed a bug that made crash black preservation on CMYK2CMYK devicelinks
Added functions to retrieve formatters from transforms
Profiles with weird curves are not prone to p`relinearization optimization.
changed memmove to memcpy in cache for xput improvement 
Fixed GBD bug (out of bounds memory overwrite) 
Fixed some potential issues as NULL dereferencing
Updated linkicc to 2.1, cleanup
Removed pthreads need
Fixed severa bugs in absolute colorimetric intent

-----------------------
2.1 Maintenance release
-----------------------

Added bound check in floating point interpolation
Fixed a bug on curve reversing when source curves have few points
Added Duotone support (Bilinear interpolation)
Fixed delphi interface
linkicc now stores the rendering intent in the profile header
Fixed several integer overflow and other integrity checks, thanks to Chris Evans
Fixed an issue on curve inversion
Fixed memory leaks on when recovering from errors
Fixed a bug in psid and profile sequence tags 
Fixed a bug in device link creation on v4 profiles
Fixed a bug in tificc in floating point formats
Peliminary Delphi wrapper 
Fixed some typos in error messages
Added cmsTagLinkedTo
Fixed VC2010, VC2008 projects
Added a check on jpgicc for NULL transforms
Added UTILS_UNUSED_PARAMETER for samples
Added cmsChangeBufferFormat for backwards compatibility
Fixed a bug on Lab + Alpha float formatters, added such predefined formatters as well
Fixed a bug on transicc that made profiles with output colorants info to malfunction
Fixed a bug that prevented linkicc to work
Fixed a bug on V2 CHAD construction, affects absolute colorimetric intent

-----------------------
2.0 Major version bump
-----------------------



