From c251236e432767a1b377efcda37ecde5dfdc7c4e Mon Sep 17 00:00:00 2001 From: Achilles Rasquinha Date: Thu, 8 Mar 2018 14:53:36 +0530 Subject: [PATCH 1/2] [FIX] module has no safe_decode --- frappe/__init__.py | 2 +- frappe/email/queue.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index fe008f82c9..1b8881a253 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1479,4 +1479,4 @@ def safe_decode(param, encoding = 'utf-8'): def parse_json(val): from frappe.utils import parse_json - return parse_json(val) + return parse_json(val) \ No newline at end of file diff --git a/frappe/email/queue.py b/frappe/email/queue.py index e20b221a6f..80fce6ab1d 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -6,7 +6,7 @@ from six.moves import range import frappe from six.moves import html_parser as HTMLParser import smtplib, quopri, json -from frappe import msgprint, throw, _ +from frappe import msgprint, throw, _, safe_decode from frappe.email.smtp import SMTPServer, get_outgoing_email_account from frappe.email.email_body import get_email, get_formatted_html, add_attachment from frappe.utils.verified_command import get_signed_params, verify_request @@ -510,7 +510,7 @@ def prepare_message(email, recipient, recipients_list): message = message.replace("", recipient) message = (message and message.encode('utf8')) or '' - message = frappe.safe_decode(message) + message = safe_decode(message) if not email.attachments: return message From fc9448922011fb33125a0e02a7b97fcf2837d774 Mon Sep 17 00:00:00 2001 From: Achilles Rasquinha Date: Thu, 8 Mar 2018 15:10:01 +0530 Subject: [PATCH 2/2] added safe encode --- frappe/__init__.py | 9 +++++++++ frappe/model/utils/user_settings.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 1b8881a253..20c96e4c60 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1470,6 +1470,15 @@ def get_version(doctype, name, limit = None, head = False, raise_err = True): def ping(): return "pong" + +def safe_encode(param, encoding = 'utf-8'): + try: + param = param.encode(encoding) + except Exception: + pass + return param + + def safe_decode(param, encoding = 'utf-8'): try: param = param.decode(encoding) diff --git a/frappe/model/utils/user_settings.py b/frappe/model/utils/user_settings.py index 2045e3a5b2..84ae3d9ee7 100644 --- a/frappe/model/utils/user_settings.py +++ b/frappe/model/utils/user_settings.py @@ -39,7 +39,7 @@ def update_user_settings(doctype, user_settings, for_update=False): def sync_user_settings(): '''Sync from cache to database (called asynchronously via the browser)''' for key, data in iteritems(frappe.cache().hgetall('_user_settings')): - doctype, user = key.split('::') + doctype, user = frappe.safe_encode(key).split('::') # WTF? frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s) on duplicate key update data=%s''', (user, doctype, data, data))