From becae426180c0438ac179a92082f5b0bd64d59cd Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 9 Mar 2015 21:59:10 +0100 Subject: [PATCH] check unpacked data from RPC for tuple type and correct length, fixes #127 --- attic/remote.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/attic/remote.py b/attic/remote.py index f2a0aed06..f21d3cbc2 100644 --- a/attic/remote.py +++ b/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 \ No newline at end of file + return repository