]> git.basschouten.com Git - openhab-addons.git/commitdiff
Adds additional checks for parser (#15165)
authormorph166955 <53797132+morph166955@users.noreply.github.com>
Wed, 12 Jul 2023 20:02:45 +0000 (15:02 -0500)
committerGitHub <noreply@github.com>
Wed, 12 Jul 2023 20:02:45 +0000 (22:02 +0200)
Signed-off-by: Ben Rosenblum <rosenblumb@gmail.com>
bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/shieldtv/ShieldTVMessageParser.java

index 4208897fe9ccf8cf34a71d9636b218d7ae83ca80..9c512010a405c71059709b74efd299fa9559db51 100644 (file)
@@ -96,84 +96,99 @@ public class ShieldTVMessageParser {
                 callback.setHostName(encHostname);
             } else if (msg.startsWith(MESSAGE_HOSTNAME)) {
                 // Longer hostname reply
-                // 080b 12 5b08b510 12 TOTALLEN? 0a LEN Hostname 12 LEN IPADDR Padding? 22 LEN DeviceID 2a LEN arm64-v8a
+                // 080b 12 5b08b510 12 TOTALLEN? 0a LEN Hostname 12 LEN IPADDR 18 9b46 22 LEN DeviceID 2a LEN arm64-v8a
                 // 2a LEN armeabi-v7a 2a LEN armeabi 180b
                 // It's possible for there to be more or less of the arm lists
                 logger.trace("{} - Longer Hostname Reply", thingId);
 
-                int i = 20;
+                int i = 18;
                 int length;
                 int current;
 
-                // Hostname
-                String st = "" + charArray[i] + "" + charArray[i + 1];
-                length = Integer.parseInt(st, 16) * 2;
-                i += 2;
-
                 StringBuilder hostname = new StringBuilder();
-                current = i;
+                StringBuilder ipAddress = new StringBuilder();
+                StringBuilder deviceId = new StringBuilder();
+                StringBuilder arch = new StringBuilder();
 
-                for (; i < current + length; i = i + 2) {
+                String st = "" + charArray[i] + "" + charArray[i + 1];
+
+                if (DELIMITER_0A.equals(st)) {
+                    i += 2; // 0a
+                    // Hostname
                     st = "" + charArray[i] + "" + charArray[i + 1];
-                    hostname.append(st);
-                }
+                    length = Integer.parseInt(st, 16) * 2;
+                    i += 2;
 
-                i += 2; // 12
+                    current = i;
 
-                // ipAddress
+                    for (; i < current + length; i = i + 2) {
+                        st = "" + charArray[i] + "" + charArray[i + 1];
+                        hostname.append(st);
+                    }
+                }
                 st = "" + charArray[i] + "" + charArray[i + 1];
-                length = Integer.parseInt(st, 16) * 2;
-                i += 2;
 
-                StringBuilder ipAddress = new StringBuilder();
-                current = i;
+                if (DELIMITER_12.equals(st)) {
+                    i += 2; // 12
 
-                for (; i < current + length; i = i + 2) {
+                    // ipAddress
                     st = "" + charArray[i] + "" + charArray[i + 1];
-                    ipAddress.append(st);
-                }
-
-                st = "" + charArray[i] + "" + charArray[i + 1];
-                while (!DELIMITER_22.equals(st)) {
+                    length = Integer.parseInt(st, 16) * 2;
                     i += 2;
-                    st = "" + charArray[i] + "" + charArray[i + 1];
-                }
 
-                i += 2; // 22
+                    current = i;
 
-                // deviceId
+                    for (; i < current + length; i = i + 2) {
+                        st = "" + charArray[i] + "" + charArray[i + 1];
+                        ipAddress.append(st);
+                    }
+                }
 
                 st = "" + charArray[i] + "" + charArray[i + 1];
-                length = Integer.parseInt(st, 16) * 2;
-                i += 2;
-
-                StringBuilder deviceId = new StringBuilder();
-                current = i;
-
-                for (; i < current + length; i = i + 2) {
-                    st = "" + charArray[i] + "" + charArray[i + 1];
-                    deviceId.append(st);
+                if (DELIMITER_18.equals(st)) {
+                    while (!DELIMITER_22.equals(st)) {
+                        i += 2;
+                        st = "" + charArray[i] + "" + charArray[i + 1];
+                    }
                 }
 
-                // architectures
                 st = "" + charArray[i] + "" + charArray[i + 1];
-                StringBuilder arch = new StringBuilder();
-                while (DELIMITER_2A.equals(st)) {
-                    i += 2;
+                if (DELIMITER_22.equals(st)) {
+                    i += 2; // 22
+
+                    // deviceId
+
                     st = "" + charArray[i] + "" + charArray[i + 1];
                     length = Integer.parseInt(st, 16) * 2;
                     i += 2;
+
                     current = i;
+
                     for (; i < current + length; i = i + 2) {
                         st = "" + charArray[i] + "" + charArray[i + 1];
-                        arch.append(st);
-                    }
-                    st = "" + charArray[i] + "" + charArray[i + 1];
-                    if (DELIMITER_2A.equals(st)) {
-                        arch.append("2c");
+                        deviceId.append(st);
                     }
                 }
 
+                // architectures
+                st = "" + charArray[i] + "" + charArray[i + 1];
+                if (DELIMITER_2A.equals(st)) {
+                    while (DELIMITER_2A.equals(st)) {
+                        i += 2;
+                        st = "" + charArray[i] + "" + charArray[i + 1];
+                        length = Integer.parseInt(st, 16) * 2;
+                        i += 2;
+                        current = i;
+                        for (; i < current + length; i = i + 2) {
+                            st = "" + charArray[i] + "" + charArray[i + 1];
+                            arch.append(st);
+                        }
+                        st = "" + charArray[i] + "" + charArray[i + 1];
+                        if (DELIMITER_2A.equals(st)) {
+                            arch.append("2c");
+                        }
+                    }
+                }
                 String encHostname = ShieldTVRequest.encodeMessage(hostname.toString());
                 String encIpAddress = ShieldTVRequest.encodeMessage(ipAddress.toString());
                 String encDeviceId = ShieldTVRequest.encodeMessage(deviceId.toString());