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

Commit a0490747 authored by Shraddha Basantwani's avatar Shraddha Basantwani
Browse files

CEC : Add additional constraint to validate physical address

Test: atest HdmiCecMessageValidatorTest
Bug: 170811408
Change-Id: Ieae66cc73ca384940a31480858dc67fab8899160
parent f0f01aec
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -309,7 +309,14 @@ public class HdmiCecMessageValidator {
    }

    private boolean isValidPhysicalAddress(byte[] params, int offset) {
        // TODO: Add more logic like validating 1.0.1.0.
        int physicalAddress = HdmiUtils.twoBytesToInt(params, offset);
        while (physicalAddress != 0) {
            int maskedAddress = physicalAddress & 0xF000;
            physicalAddress = (physicalAddress << 4) & 0xFFFF;
            if (maskedAddress == 0 && physicalAddress != 0) {
                return false;
            }
        }

        if (!mService.isTvDevice()) {
            // If the device is not TV, we can't convert path to port-id, so stop here.
+65 −0
Original line number Diff line number Diff line
@@ -96,6 +96,16 @@ public class HdmiCecMessageValidatorTest {
        assertMessageValidity("40:8E:02").isEqualTo(ERROR_PARAMETER);
    }

    @Test
    public void isValid_systemAudioModeRequest() {
        assertMessageValidity("40:70:00:00").isEqualTo(OK);
        assertMessageValidity("40:70").isEqualTo(OK);

        assertMessageValidity("F0:70").isEqualTo(ERROR_SOURCE);
        // Invalid physical address
        assertMessageValidity("40:70:10:10").isEqualTo(ERROR_PARAMETER);
    }

    @Test
    public void isValid_setSystemAudioMode() {
        assertMessageValidity("40:72:00").isEqualTo(OK);
@@ -316,6 +326,8 @@ public class HdmiCecMessageValidatorTest {
        assertMessageValidity("40:A2:14:09:12:28:4B:19:10:08:10:00").isEqualTo(ERROR_PARAMETER);
        // Invalid External PLug
        assertMessageValidity("04:A1:0C:08:15:05:04:1E:02:04:00").isEqualTo(ERROR_PARAMETER);
        // Invalid Physical Address
        assertMessageValidity("40:A2:14:09:12:28:4B:19:10:05:10:10").isEqualTo(ERROR_PARAMETER);
    }

    @Test
@@ -539,6 +551,59 @@ public class HdmiCecMessageValidatorTest {
        assertMessageValidity("40:44:57:40").isEqualTo(ERROR_PARAMETER);
    }

    @Test
    public void isValid_physicalAddress() {
        assertMessageValidity("4F:82:10:00").isEqualTo(OK);
        assertMessageValidity("4F:82:12:34").isEqualTo(OK);
        assertMessageValidity("0F:82:00:00").isEqualTo(OK);
        assertMessageValidity("40:9D:14:00").isEqualTo(OK);
        assertMessageValidity("40:9D:10:00").isEqualTo(OK);
        assertMessageValidity("0F:81:44:20").isEqualTo(OK);
        assertMessageValidity("4F:81:13:10").isEqualTo(OK);
        assertMessageValidity("4F:86:14:14").isEqualTo(OK);
        assertMessageValidity("0F:86:15:24").isEqualTo(OK);

        assertMessageValidity("4F:82:10").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("40:9D:14").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("0F:81:44").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("0F:86:15").isEqualTo(ERROR_PARAMETER_SHORT);

        assertMessageValidity("4F:82:10:10").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("4F:82:10:06").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("40:9D:14:04").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("40:9D:10:01").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("0F:81:44:02").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("4F:81:13:05").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("4F:86:10:14").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("0F:86:10:24").isEqualTo(ERROR_PARAMETER);
    }

    @Test
    public void isValid_reportPhysicalAddress() {
        assertMessageValidity("4F:84:10:00:04").isEqualTo(OK);
        assertMessageValidity("0F:84:00:00:00").isEqualTo(OK);

        assertMessageValidity("4F:84:10:00").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("0F:84:00").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("40:84:10:00:04").isEqualTo(ERROR_DESTINATION);
        // Invalid Physical Address
        assertMessageValidity("4F:84:10:10:04").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("0F:84:00:30:00").isEqualTo(ERROR_PARAMETER);
        // Invalid Device Type
        assertMessageValidity("4F:84:12:34:08").isEqualTo(ERROR_PARAMETER);
    }

    @Test
    public void isValid_routingChange() {
        assertMessageValidity("0F:80:10:00:40:00").isEqualTo(OK);
        assertMessageValidity("4F:80:12:00:50:00").isEqualTo(OK);

        assertMessageValidity("0F:80:10:00:40").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("40:80:12:00:50:00").isEqualTo(ERROR_DESTINATION);
        assertMessageValidity("0F:80:10:01:40:00").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("4F:80:12:00:50:50").isEqualTo(ERROR_PARAMETER);
    }

    private IntegerSubject assertMessageValidity(String message) {
        return assertThat(mHdmiCecMessageValidator.isValid(buildMessage(message)));
    }