summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
Diffstat (limited to 'synapse')
-rw-r--r--synapse/storage/appservice.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/synapse/storage/appservice.py b/synapse/storage/appservice.py
index 557e377ca5..f8cbb3f323 100644
--- a/synapse/storage/appservice.py
+++ b/synapse/storage/appservice.py
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 import logging
+import urllib
 import yaml
 from simplejson import JSONDecodeError
 import simplejson as json
@@ -209,7 +210,12 @@ class ApplicationServiceStore(SQLBaseStore):
             if not isinstance(as_info.get(field), basestring):
                 raise KeyError("Required string field: '%s'", field)
 
-        user = UserID(as_info["sender_localpart"], self.hostname)
+        localpart = as_info["sender_localpart"]
+        if urllib.quote(localpart) != localpart:
+            raise ValueError(
+                "sender_localpart needs characters which are not URL encoded."
+            )
+        user = UserID(localpart, self.hostname)
         user_id = user.to_string()
 
         # namespace checks