xref: /aosp_15_r20/external/pdfium/third_party/lcms/0035-func-ptr-mixup.patch (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1diff --git a/third_party/lcms/src/cmsopt.c b/third_party/lcms/src/cmsopt.c
2index e3212fb4d..a5475709b 100644
3--- a/third_party/lcms/src/cmsopt.c
4+++ b/third_party/lcms/src/cmsopt.c
5@@ -100,6 +100,15 @@ typedef struct {
6
7 } Curves16Data;
8
9+// A simple adapter to prevent _cmsPipelineEval16Fn vs. _cmsInterpFn16
10+// confusion, which trips up UBSAN.
11+static
12+void Lerp16Adapter(CMSREGISTER const cmsUInt16Number in[],
13+                   CMSREGISTER cmsUInt16Number out[],
14+                   const void* data) {
15+    cmsInterpParams* params = (cmsInterpParams*)data;
16+    params->Interpolation.Lerp16(in, out, params);
17+}
18
19 // Simple optimizations ----------------------------------------------------------------------------------------------------------
20
21@@ -805,7 +814,7 @@ Error:
22
23     if (DataSetIn == NULL && DataSetOut == NULL) {
24
25-        _cmsPipelineSetOptimizationParameters(Dest, (_cmsPipelineEval16Fn) DataCLUT->Params->Interpolation.Lerp16, DataCLUT->Params, NULL, NULL);
26+        _cmsPipelineSetOptimizationParameters(Dest, Lerp16Adapter, DataCLUT->Params, NULL, NULL);
27     }
28     else {
29
30