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

Commit 662af62f authored by Nathalie Le Clair's avatar Nathalie Le Clair Committed by Gerrit Code Review
Browse files

Merge "HDMICEC: Add a new validation to CEC messages"

parents 56db11df bbdceb95
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -242,7 +242,7 @@ public class HdmiCecMessageValidator {
        mValidationInfo.append(opcode, new ValidationInfo(validator, addrType));
    }

    int isValid(HdmiCecMessage message) {
    int isValid(HdmiCecMessage message, boolean isMessageReceived) {
        int opcode = message.getOpcode();
        ValidationInfo info = mValidationInfo.get(opcode);
        if (info == null) {
@@ -256,6 +256,22 @@ public class HdmiCecMessageValidator {
            HdmiLogger.warning("Unexpected source: " + message);
            return ERROR_SOURCE;
        }

        if (isMessageReceived) {
            // Check if the source's logical address and local device's logical
            // address are the same.
            for (HdmiCecLocalDevice device : mService.getAllLocalDevices()) {
                synchronized (device.mLock) {
                    if (message.getSource() == device.getDeviceInfo().getLogicalAddress()
                            && message.getSource() != Constants.ADDR_UNREGISTERED) {
                        HdmiLogger.warning(
                                "Unexpected source: message sent from device itself, " + message);
                        return ERROR_SOURCE;
                    }
                }
            }
        }

        // Check the destination field.
        if (message.getDestination() == Constants.ADDR_BROADCAST) {
            if ((info.addressType & DEST_BROADCAST) == 0) {
+4 −4
Original line number Diff line number Diff line
@@ -1122,7 +1122,7 @@ public class HdmiControlService extends SystemService {
    @ServiceThreadOnly
    void sendCecCommand(HdmiCecMessage command, @Nullable SendMessageCallback callback) {
        assertRunOnServiceThread();
        if (mMessageValidator.isValid(command) == HdmiCecMessageValidator.OK) {
        if (mMessageValidator.isValid(command, false) == HdmiCecMessageValidator.OK) {
            mCecController.sendCommand(command, callback);
        } else {
            HdmiLogger.error("Invalid message type:" + command);
@@ -1153,7 +1153,7 @@ public class HdmiControlService extends SystemService {
    @ServiceThreadOnly
    boolean handleCecCommand(HdmiCecMessage message) {
        assertRunOnServiceThread();
        int errorCode = mMessageValidator.isValid(message);
        int errorCode = mMessageValidator.isValid(message, true);
        if (errorCode != HdmiCecMessageValidator.OK) {
            // We'll not response on the messages with the invalid source or destination
            // or with parameter length shorter than specified in the standard.
+1 −1
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ public class HdmiCecLocalDeviceTest {
        mMessageValidator =
                new HdmiCecMessageValidator(mHdmiControlService) {
                    @Override
                    int isValid(HdmiCecMessage message) {
                    int isValid(HdmiCecMessage message, boolean isMessageReceived) {
                        return HdmiCecMessageValidator.OK;
                    }
                };
+1 −1
Original line number Diff line number Diff line
@@ -629,7 +629,7 @@ public class HdmiCecMessageValidatorTest {
    }

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

    /**