| diff --git a/third_party/lcms/src/cmsopt.c b/third_party/lcms/src/cmsopt.c |
| index e3212fb4d..a5475709b 100644 |
| --- a/third_party/lcms/src/cmsopt.c |
| +++ b/third_party/lcms/src/cmsopt.c |
| @@ -100,6 +100,15 @@ typedef struct { |
| |
| } Curves16Data; |
| |
| +// A simple adapter to prevent _cmsPipelineEval16Fn vs. _cmsInterpFn16 |
| +// confusion, which trips up UBSAN. |
| +static |
| +void Lerp16Adapter(CMSREGISTER const cmsUInt16Number in[], |
| + CMSREGISTER cmsUInt16Number out[], |
| + const void* data) { |
| + cmsInterpParams* params = (cmsInterpParams*)data; |
| + params->Interpolation.Lerp16(in, out, params); |
| +} |
| |
| // Simple optimizations ---------------------------------------------------------------------------------------------------------- |
| |
| @@ -805,7 +814,7 @@ Error: |
| |
| if (DataSetIn == NULL && DataSetOut == NULL) { |
| |
| - _cmsPipelineSetOptimizationParameters(Dest, (_cmsPipelineEval16Fn) DataCLUT->Params->Interpolation.Lerp16, DataCLUT->Params, NULL, NULL); |
| + _cmsPipelineSetOptimizationParameters(Dest, Lerp16Adapter, DataCLUT->Params, NULL, NULL); |
| } |
| else { |
| |