validate:launcher: Handle validate report bigger than allowed by the socket
authorThibault Saunier <tsaunier@igalia.com>
Tue, 11 Feb 2020 12:18:23 +0000 (09:18 -0300)
committerThibault Saunier <tsaunier@gnome.org>
Thu, 13 Feb 2020 00:11:45 +0000 (00:11 +0000)
This almost never happens but I had a case where we had a report
with a GstSample in the caps that were reported leading to an
error printed.

validate/launcher/baseclasses.py

index 6f94da7..a4c848b 100644 (file)
@@ -708,18 +708,25 @@ class GstValidateListener(socketserver.BaseRequestHandler, Loggable):
             if raw_len == b'':
                 return
             msglen = struct.unpack('>I', raw_len)[0]
+            e = None
+            raw_msg = bytes()
+            while msglen != len(raw_msg):
+                raw_msg += self.request.recv(msglen - len(raw_msg))
+            if e is not None:
+                continue
             try:
-                msg = self.request.recv(msglen).decode('utf-8', 'ignore')
+                msg = raw_msg.decode('utf-8', 'ignore')
             except UnicodeDecodeError as e:
-                self.error("Could not decode message: %s - %s" % (msg, e))
+                self.error("%s Could not decode message: %s - %s" % (test.classname if test else "unknown", msg, e))
                 continue
+
             if msg == '':
                 return
 
             try:
                 obj = json.loads(msg)
             except json.decoder.JSONDecodeError as e:
-                self.error("Could not deserialize: %s - %s" % (msg, e))
+                self.error("%s Could not decode message: %s - %s" % (test.classname if test else "unknown", msg, e))
                 continue
 
             if test is None: