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

Commit c51daa3a authored by Romain Guy's avatar Romain Guy Committed by gitbuildkicker
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
(cherry picked from commit bfa58aab)
parent a98a52fa
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);
        }