commit 65d0560475242e600ebd14cca0474ddc98e49485
parent 592a403fa71775e413b4f3199b81636bad37e928
Author: ThomasV <thomasv@gitorious>
Date: Fri, 5 Sep 2014 12:04:03 +0200
storage: deepcopy and sanitize json
Diffstat:
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: