electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 65d0560475242e600ebd14cca0474ddc98e49485
parent 592a403fa71775e413b4f3199b81636bad37e928
Author: ThomasV <thomasv@gitorious>
Date:   Fri,  5 Sep 2014 12:04:03 +0200

storage: deepcopy and sanitize json

Diffstat:
Mlib/wallet.py | 23+++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/lib/wallet.py b/lib/wallet.py @@ -25,6 +25,7 @@ import random import time import math import json +import copy from util import print_msg, print_error @@ -92,13 +93,20 @@ class WalletStorage(object): except IOError: return try: - d = json.loads(data) + self.data = json.loads(data) except: try: d = ast.literal_eval(data) #parse raw data from reading wallet file except Exception: raise IOError("Cannot read wallet file.") - self.data = d + self.data = {} + for k, v in d.items(): + try: + json.dumps(key) + json.dumps(value) + except: + continue + self.data[key] = value self.file_exists = True def get(self, key, default=None): @@ -106,13 +114,20 @@ class WalletStorage(object): v = self.data.get(key) if v is None: v = default + else: + v = copy.deepcopy(v) return v def put(self, key, value, save = True): - + try: + json.dumps(key) + json.dumps(value) + except: + print_error("json error: cannot save", key) + return with self.lock: if value is not None: - self.data[key] = value + self.data[key] = copy.deepcopy(value) elif key in self.data: self.data.pop(key) if save: