Browse Source

check unpacked data from RPC for tuple type and correct length, fixes #127

Thomas Waldmann 10 years ago
parent
commit
becae42618
1 changed files with 9 additions and 3 deletions
  1. 9 3
      attic/remote.py

+ 9 - 3
attic/remote.py

@@ -44,7 +44,10 @@ class RepositoryServer(object):
                 if not data:
                     return
                 unpacker.feed(data)
-                for type, msgid, method, args in unpacker:
+                for unpacked in unpacker:
+                    if not (isinstance(unpacked, tuple) and len(unpacked) == 4):
+                        raise Exception("Unexpected RPC data format.")
+                    type, msgid, method, args = unpacked
                     method = method.decode('ascii')
                     try:
                         try:
@@ -172,7 +175,10 @@ class RemoteRepository(object):
                 if not data:
                     raise ConnectionClosed()
                 self.unpacker.feed(data)
-                for type, msgid, error, res in self.unpacker:
+                for unpacked in self.unpacker:
+                    if not (isinstance(unpacked, tuple) and len(unpacked) == 4):
+                        raise Exception("Unexpected RPC data format.")
+                    type, msgid, error, res = unpacked
                     if msgid in self.ignore_responses:
                         self.ignore_responses.remove(msgid)
                     else:
@@ -312,4 +318,4 @@ class RepositoryCache:
 def cache_if_remote(repository):
     if isinstance(repository, RemoteRepository):
         return RepositoryCache(repository)
-    return repository
+    return repository