diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index c127e71494..b90b5ac8ab 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -21,7 +21,7 @@ from evennia.objects.models import ObjectDB from evennia.comms.models import ChannelDB from evennia.commands import cmdhandler from evennia.utils import logger -from evennia.utils.utils import (lazy_property, +from evennia.utils.utils import (lazy_property, to_str, make_iter, to_unicode, is_iter, variable_from_module) from evennia.typeclasses.attributes import NickHandler @@ -421,6 +421,13 @@ class DefaultAccount(with_metaclass(TypeclassBase, AccountDB)): kwargs["options"] = options + if text and not (isinstance(text, basestring) or isinstance(text, tuple)): + # sanitize text before sending across the wire + try: + text = to_str(text, force_string=True) + except Exception: + text = repr(text) + # session relay sessions = make_iter(session) if session else self.sessions.all() for session in sessions: diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 0d5f85b695..5531b7f856 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -22,7 +22,7 @@ from evennia.commands import cmdhandler from evennia.utils import search from evennia.utils import logger from evennia.utils.utils import (variable_from_module, lazy_property, - make_iter, to_unicode, is_iter) + make_iter, to_unicode, is_iter, to_str) from django.utils.translation import ugettext as _ _MULTISESSION_MODE = settings.MULTISESSION_MODE @@ -528,11 +528,19 @@ class DefaultObject(with_metaclass(TypeclassBase, ObjectDB)): kwargs["options"] = options + if text and not (isinstance(text, basestring) or isinstance(text, tuple)): + # sanitize text before sending across the wire + try: + text = to_str(text, force_string=True) + except Exception: + text = repr(text) + # relay to session(s) sessions = make_iter(session) if session else self.sessions.all() for session in sessions: session.data_out(text=text, **kwargs) + def for_contents(self, func, exclude=None, **kwargs): """ Runs a function on every object contained within this one.