tfix #2326: backward-compatibility of wallet files - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 85f2f667c3172230a970a181f29a31291c76c0e5 DIR parent aa090007e9ecd1ef149919af565fa90a50513dcf HTML Author: ThomasV <thomasv@electrum.org> Date: Thu, 23 Mar 2017 09:20:32 +0100 fix #2326: backward-compatibility of wallet files Diffstat: M lib/storage.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) --- DIR diff --git a/lib/storage.py b/lib/storage.py t@@ -80,7 +80,27 @@ class WalletStorage(PrintError): try: self.data = json.loads(s) except: - raise IOError("Cannot read wallet file '%s'" % self.path) + try: + d = ast.literal_eval(s) + labels = d.get('labels', {}) + except Exception as e: + raise IOError("Cannot read wallet file '%s'" % self.path) + self.data = {} + # In old versions of Electrum labels were latin1 encoded, this fixes breakage. + for i, label in labels.items(): + try: + unicode(label) + except UnicodeDecodeError: + d['labels'][i] = unicode(label.decode('latin1')) + for key, value in d.items(): + try: + json.dumps(key) + json.dumps(value) + except: + self.print_error('Failed to convert label to json format', key) + continue + self.data[key] = value + # check here if I need to load a plugin t = self.get('wallet_type') l = plugin_loaders.get(t)