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