Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfa58aab authored by Romain Guy's avatar Romain Guy
Browse files

Range check transfer params in float domain

Our native code uses floats for transfer parameters, the range
check was too small (using the next representable double instead
of the next representable float).

Bug: 37013532
Test: Manual run of broken app, CtsGraphicsTestCases
Change-Id: Id91a3e62068be0abf13ee75e39c758eb106a5f24
parent d09be1c0
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -2079,8 +2079,11 @@ public abstract class ColorSpace {
                    throw new IllegalArgumentException("Parameters cannot be NaN");
                }

                if (!(d >= 0.0 && d <= 1.0 + Math.ulp(1.0))) {
                    throw new IllegalArgumentException("Parameter d must be in the range [0..1]");
                // Next representable float after 1.0
                // We use doubles here but the representation inside our native code is often floats
                if (!(d >= 0.0 && d <= 1.0f + Math.ulp(1.0f))) {
                    throw new IllegalArgumentException("Parameter d must be in the range [0..1], " +
                            "was " + d);
                }

                if (d == 0.0 && (a == 0.0 || g == 0.0)) {
@@ -2495,7 +2498,7 @@ public abstract class ColorSpace {
                            x -> Math.pow(x < 0.0 ? 0.0 : x, gamma),
                    min, max, id);
            mTransferParameters = gamma == 1.0 ?
                    new TransferParameters(0.0, 0.0, 1.0, 1.0 + Math.ulp(1.0), gamma) :
                    new TransferParameters(0.0, 0.0, 1.0, 1.0 + Math.ulp(1.0f), gamma) :
                    new TransferParameters(1.0, 0.0, 0.0, 0.0, gamma);
        }