From b42fafabb480db0653226a224006dae28c489665 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sat, 2 Feb 2019 17:42:24 +0100 Subject: Make the cache encode and decode not crash if something goes wrong --- slixmpp/util/cache.py | 7 ++++++- tests/test_cache.py | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/slixmpp/util/cache.py b/slixmpp/util/cache.py index 055163d1..09495841 100644 --- a/slixmpp/util/cache.py +++ b/slixmpp/util/cache.py @@ -84,7 +84,10 @@ class FileSystemStorage: log.debug('%s not present in cache', key) except OSError: log.debug('Failed to read %s from cache:', key, exc_info=True) - return None + except Exception: + log.debug('Failed to decode %s from cache:', key, exc_info=True) + log.debug('Removing %s entry', key) + self._remove(directory, key) def _store(self, directory, key, value): filename = os.path.join(directory, key.replace('/', '_')) @@ -96,6 +99,8 @@ class FileSystemStorage: except OSError: log.debug('Failed to store %s to cache:', key, exc_info=True) return False + except Exception: + log.debug('Failed to encode %s to cache:', key, exc_info=True) def _remove(self, directory, key): filename = os.path.join(directory, key.replace('/', '_')) diff --git a/tests/test_cache.py b/tests/test_cache.py index 789e8bbf..78e9ee03 100644 --- a/tests/test_cache.py +++ b/tests/test_cache.py @@ -34,9 +34,14 @@ class TestCacheClass(SlixTest): ) def testFileSystemCache(self): + def failing_decode(value): + if value == "failme": + raise Exception("you failed") + return value with TemporaryDirectory() as tmpdir: - cache = FileSystemCache(tmpdir, "test") + cache = FileSystemCache(tmpdir, "test", decode=failing_decode) cache.store("test", "test_value") + cache.store("test2", "failme") self.assertEqual( cache.retrieve("test"), "test_value" @@ -47,6 +52,11 @@ class TestCacheClass(SlixTest): None ) + self.assertEqual( + cache.retrieve("test2"), + None + ) + def testFileSystemPerJidCache(self): with TemporaryDirectory() as tmpdir: cache = FileSystemPerJidCache(tmpdir, "test") -- cgit v1.2.3