matrix-org / synapse

Synapse: Matrix homeserver written in Python/Twisted.
https://matrix-org.github.io/synapse
Apache License 2.0
11.79k stars 2.13k forks source link

Users can't send message with emoji (Internal server error). #3205

Closed mpwp closed 6 years ago

mpwp commented 6 years ago

Description

Users can't send message with emoji (Internal server error).

This exception appears in the log: exceptions.ValueError: unichr() arg not in range(0x10000) (narrow Python build)

The issue appeared 2 weeks ago, after I've got a hard time in updating the server and the database.. I don't know why but when updating via pip, it doesn't worked fine due to the cryptography library. So I did a new install with virtualenv --system-site-packages to use the py-cryptography from OpenBSD and it worked.

There was also a big update of PostgreSQL, and I may have broken a thing or two at the time. As it seems an encoding issue, could it come from here?

Version information

Half-Shot commented 6 years ago

I think in order to help we'd need a larger stacktrace than that one line. It doesn't give any context to where it is failing.

mpwp commented 6 years ago

Yes, sure! Here it is:


2018-05-10 13:06:55,937 - synapse.http.server - 196 - ERROR - PUT-8 - Failed handle request synapse.http.server._async_render on <synapse.rest.ClientRestResource object at 0x14e6f45231d0>: <SynapseRequest at 0x14e6d3d888c0 method=PUT uri=### clientproto=HTTP/1.1 site=8448>: Traceback (most recent call last):
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1442, in gotResult
    _inlineCallbacks(r, g, deferred)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
--- <exception caught here> ---
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/http/server.py", line 167, in wrapped_request_handler
    yield request_handler(self, request, request_metrics)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/http/server.py", line 312, in _async_render
    callback_return = yield callback(request, **kwargs)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/rest/client/v1/room.py", line 210, in on_POST
    txn_id=txn_id,
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/handlers/message.py", line 575, in create_and_send_nonmember_event
    txn_id=txn_id
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/handlers/message.py", line 493, in create_event
    prev_events_and_hashes=prev_events_and_hashes,
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/util/metrics.py", line 95, in measured_func
    r = yield func(self, *args, **kwargs)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1386, in _inlineCallbacks
    result = g.send(result)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/handlers/message.py", line 655, in create_new_client_event
    builder, self.server_name, signing_key
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/crypto/event_signing.py", line 110, in add_hashes_and_signatures
    name, digest = compute_content_hash(event, hash_algorithm=hash_algorithm)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/synapse/crypto/event_signing.py", line 71, in compute_content_hash
    event_json_bytes = encode_canonical_json(event_json)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/canonicaljson.py", line 142, in encode_canonical_json
    return _unascii(s)
  File "/usr/local/_synapse/synapse/lib/python2.7/site-packages/canonicaljson.py", line 121, in _unascii
    chunks.append(unichr(c))
exceptions.ValueError: unichr() arg not in range(0x10000) (narrow Python build)
Half-Shot commented 6 years ago

Oh boy, this looks like canonicaljson isn't happy with the characters. Any ideas @richvdh?

Tokodomo commented 6 years ago

I have the same problem after a straight upgrade (via pip in venv) from Synapse 0.26.1 to 0.27.4:

Starting ...
2018-04-26 09:39:53,217 - synapse.python_dependencies - 120 - INFO - None - Using 'saml2' version '4.5.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/saml2/__init__.pyc' to satisfy 'pysaml2>=3.0.0'
2018-04-26 09:39:53,218 - synapse.python_dependencies - 120 - INFO - None - Using 'msgpack' version None from '/var/synapse/.synapse/lib/python2.7/site-packages/msgpack/__init__.pyc' to satisfy 'msgpack-python>=0.3.0'
2018-04-26 09:39:53,218 - synapse.python_dependencies - 120 - INFO - None - Using 'daemonize' version '2.4.7' from '/var/synapse/.synapse/lib/python2.7/site-packages/daemonize.pyc' to satisfy 'daemonize'
2018-04-26 09:39:53,219 - synapse.python_dependencies - 120 - INFO - None - Using 'frozendict' version None from '/var/synapse/.synapse/lib/python2.7/site-packages/frozendict/__init__.pyc' to satisfy 'frozendict>=0.4'
2018-04-26 09:39:53,220 - synapse.python_dependencies - 120 - INFO - None - Using 'OpenSSL' version '17.5.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/OpenSSL/__init__.pyc' to satisfy 'pyopenssl>=0.14'
2018-04-26 09:39:53,220 - synapse.python_dependencies - 120 - INFO - None - Using 'pydenticon' version None from '/var/synapse/.synapse/lib/python2.7/site-packages/pydenticon/__init__.pyc' to satisfy 'pydenticon'
2018-04-26 09:39:53,221 - synapse.python_dependencies - 120 - INFO - None - Using 'pymacaroons' version '0.9.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/pymacaroons/__init__.pyc' to satisfy 'pymacaroons-pynacl'
2018-04-26 09:39:53,222 - synapse.python_dependencies - 120 - INFO - None - Using 'service_identity' version '17.0.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/service_identity/__init__.pyc' to satisfy 'service_identity>=1.0.0'
2018-04-26 09:39:53,222 - synapse.python_dependencies - 120 - INFO - None - Using 'signedjson' version '1.0.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/signedjson/__init__.pyc' to satisfy 'signedjson>=1.0.0'
2018-04-26 09:39:53,223 - synapse.python_dependencies - 120 - INFO - None - Using 'yaml' version '3.12' from '/var/synapse/.synapse/lib/python2.7/site-packages/yaml/__init__.pyc' to satisfy 'pyyaml'
2018-04-26 09:39:53,224 - synapse.python_dependencies - 120 - INFO - None - Using 'unpaddedbase64' version '1.1.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/unpaddedbase64.pyc' to satisfy 'unpaddedbase64>=1.1.0'
2018-04-26 09:39:53,225 - synapse.python_dependencies - 120 - INFO - None - Using 'PIL' version '5.1.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/PIL/__init__.pyc' to satisfy 'pillow'
2018-04-26 09:39:53,225 - synapse.python_dependencies - 120 - INFO - None - Using 'pyasn1' version '0.4.2' from '/var/synapse/.synapse/lib/python2.7/site-packages/pyasn1/__init__.pyc' to satisfy 'pyasn1'
2018-04-26 09:39:53,226 - synapse.python_dependencies - 120 - INFO - None - Using 'phonenumbers' version '8.9.4' from '/var/synapse/.synapse/lib/python2.7/site-packages/phonenumbers/__init__.pyc' to satisfy 'phonenumbers>=8.2.0'
2018-04-26 09:39:53,227 - synapse.python_dependencies - 120 - INFO - None - Using 'nacl' version '1.2.1' from '/var/synapse/.synapse/lib/python2.7/site-packages/nacl/__init__.pyc' to satisfy 'pynacl>=1.2.1'
2018-04-26 09:39:53,227 - synapse.python_dependencies - 120 - INFO - None - Using 'nacl.bindings' version '1.2.1' from '/var/synapse/.synapse/lib/python2.7/site-packages/nacl/__init__.pyc' to satisfy 'pynacl>=1.2.1'
2018-04-26 09:39:53,228 - synapse.python_dependencies - 120 - INFO - None - Using 'jsonschema' version '2.6.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/jsonschema/__init__.pyc' to satisfy 'jsonschema>=2.5.1'
2018-04-26 09:39:53,229 - synapse.python_dependencies - 120 - INFO - None - Using 'blist' version '1.3.6' from '/var/synapse/.synapse/lib/python2.7/site-packages/blist/__init__.pyc' to satisfy 'blist'
2018-04-26 09:39:53,229 - synapse.python_dependencies - 120 - INFO - None - Using 'twisted' version '17.9.0' from '/var/synapse/.synapse/lib/python2.7/site-packages/twisted/__init__.pyc' to satisfy 'Twisted>=16.0.0'
2018-04-26 09:39:53,230 - synapse.python_dependencies - 120 - INFO - None - Using 'bcrypt' version u'3.1.4' from '/var/synapse/.synapse/lib/python2.7/site-packages/bcrypt/__init__.pyc' to satisfy 'bcrypt'
2018-04-26 09:39:53,231 - synapse.python_dependencies - 120 - INFO - None - Using 'canonicaljson' version '1.1.3' from '/var/synapse/.synapse/lib/python2.7/site-packages/canonicaljson.pyc' to satisfy 'canonicaljson>=1.1.3'
2018-04-26 09:39:53,334 - synapse.app.homeserver - 305 - INFO - None - Server hostname: localhost
2018-04-26 09:39:53,338 - synapse.app.homeserver - 306 - INFO - None - Server version: Synapse/0.27.4
2018-04-26 09:39:53,398 - synapse.app.homeserver - 324 - INFO - None - Preparing database: sqlite3...
2018-04-26 09:39:53,423 - synapse.storage.prepare_database - 224 - INFO - None - Upgrading schema to v48
2018-04-26 09:39:53,435 - synapse.app.homeserver - 342 - INFO - None - Database prepared in sqlite3.
2018-04-26 09:39:53,435 - synapse.server - 174 - INFO - None - Setting up.
2018-04-26 09:39:57,261 - synapse.storage.event_push_actions - 475 - INFO - None - Searching for stream ordering 1 month ago
2018-04-26 09:39:57,266 - synapse.storage.event_push_actions - 481 - INFO - None - Found stream ordering 1 month ago: it's 1306542
2018-04-26 09:39:57,267 - synapse.storage.event_push_actions - 483 - INFO - None - Searching for stream ordering 1 day ago
2018-04-26 09:39:57,272 - synapse.storage.event_push_actions - 489 - INFO - None - Found stream ordering 1 day ago: it's 1321169
2018-04-26 09:42:00,658 - synapse.server - 176 - INFO - None - Finished setting up.
2018-04-26 09:42:00,662 - synapse.handlers.auth - 75 - INFO - None - Extra password_providers: []
2018-04-26 09:42:00,665 - synapse.push.pusher - 42 - INFO - None - email enable notifs: False
2018-04-26 09:42:00,821 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <twisted.web.resource.EncodingResourceWrapper object at 0x7fce65a6aed0> to path /_matrix/client/r0
2018-04-26 09:42:00,822 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching FilePath('/var/synapse/.synapse/lib/python2.7/site-packages/synapse/static') to path /_matrix/static
2018-04-26 09:42:00,823 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <twisted.web.resource.EncodingResourceWrapper object at 0x7fce65a6aed0> to path /_matrix/client/versions
2018-04-26 09:42:00,823 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <twisted.web.resource.EncodingResourceWrapper object at 0x7fce65a6aed0> to path /_matrix/client/unstable
2018-04-26 09:42:00,824 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.media.v1.media_repository.MediaRepositoryResource instance at 0x7fce65a598c0> to path /_matrix/media/v1
2018-04-26 09:42:00,825 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <twisted.web.resource.EncodingResourceWrapper object at 0x7fce65a6aed0> to path /_matrix/client/api/v1
2018-04-26 09:42:00,826 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.media.v0.content_repository.ContentRepoResource instance at 0x7fce65a45a28> to path /_matrix/content
2018-04-26 09:42:00,827 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.key.v2.KeyApiV2Resource instance at 0x7fce65a59b90> to path /_matrix/key/v2
2018-04-26 09:42:00,828 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <twisted.web.resource.EncodingResourceWrapper object at 0x7fce65a6aed0> to path /_matrix/client/v2_alpha
2018-04-26 09:42:00,829 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching FilePath('/var/synapse/.synapse/lib/python2.7/site-packages/syweb/webclient') to path /_matrix/client
2018-04-26 09:42:00,830 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.key.v1.server_key_resource.LocalKey instance at 0x7fce65a59bd8> to path /_matrix/key/v1
2018-04-26 09:42:00,831 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.media.v1.media_repository.MediaRepositoryResource instance at 0x7fce65a598c0> to path /_matrix/media/r0
2018-04-26 09:42:00,832 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.federation.transport.server.TransportLayerServer object at 0x7fce65a6af90> to path /_matrix/federation/v1
2018-04-26 09:42:00,837 - twisted - 131 - INFO - None - SynapseSite (TLS) starting on 8448
2018-04-26 09:42:00,838 - twisted - 131 - INFO - None - Starting factory <synapse.http.site.SynapseSite instance at 0x7fce65a06d40>
2018-04-26 09:42:00,840 - synapse.app.homeserver - 158 - INFO - None - Synapse now listening on port 8448
2018-04-26 09:42:00,868 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.ClientRestResource object at 0x7fce65a030d0> to path /_matrix/client/r0
2018-04-26 09:42:00,869 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching FilePath('/var/synapse/.synapse/lib/python2.7/site-packages/synapse/static') to path /_matrix/static
2018-04-26 09:42:00,870 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.ClientRestResource object at 0x7fce65a030d0> to path /_matrix/client/versions
2018-04-26 09:42:00,871 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.ClientRestResource object at 0x7fce65a030d0> to path /_matrix/client/unstable
2018-04-26 09:42:00,872 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.media.v1.media_repository.MediaRepositoryResource instance at 0x7fce65a598c0> to path /_matrix/media/v1
2018-04-26 09:42:00,872 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.ClientRestResource object at 0x7fce65a030d0> to path /_matrix/client/api/v1
2018-04-26 09:42:00,873 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.media.v0.content_repository.ContentRepoResource instance at 0x7fce659e2488> to path /_matrix/content
2018-04-26 09:42:00,874 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.key.v2.KeyApiV2Resource instance at 0x7fce659e2638> to path /_matrix/key/v2
2018-04-26 09:42:00,875 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.ClientRestResource object at 0x7fce65a030d0> to path /_matrix/client/v2_alpha
2018-04-26 09:42:00,876 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching FilePath('/var/synapse/.synapse/lib/python2.7/site-packages/syweb/webclient') to path /_matrix/client
2018-04-26 09:42:00,877 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.key.v1.server_key_resource.LocalKey instance at 0x7fce659e24d0> to path /_matrix/key/v1
2018-04-26 09:42:00,878 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.rest.media.v1.media_repository.MediaRepositoryResource instance at 0x7fce65a598c0> to path /_matrix/media/r0
2018-04-26 09:42:00,879 - synapse.util.httpresourcetree - 43 - INFO - None - Attaching <synapse.federation.transport.server.TransportLayerServer object at 0x7fce659e6d10> to path /_matrix/federation/v1
2018-04-26 09:42:00,881 - twisted - 131 - INFO - None - SynapseSite starting on 8008
2018-04-26 09:42:00,882 - twisted - 131 - INFO - None - Starting factory <synapse.http.site.SynapseSite instance at 0x7fce659e2878>
2018-04-26 09:42:00,884 - twisted - 131 - INFO - None - SynapseSite starting on 8008
2018-04-26 09:42:00,885 - synapse.app.homeserver - 158 - INFO - None - Synapse now listening on port 8008
started synapse.app.homeserver('homeserver.yaml')
...
...
2018-04-26 09:44:59,583 - synapse.access.http.8008 - 59 - INFO - PUT-79 - 96.13.231.25 - 8008 - Received request: PUT /_matrix/client/r0/rooms/!AFsEGZHXWuEnTVIScB:localhost/send/m.room.message/1524728701656
2018-04-26 09:44:59,585 - synapse.util.async - 287 - INFO - PUT-79 - Acquired uncontended limiter lock for key '!AFsEGZHXWuEnTVIScB:localhost'
2018-04-26 09:44:59,602 - synapse.util.async - 296 - INFO - PUT-79 - Releasing limiter lock for key '!AFsEGZHXWuEnTVIScB:localhost'
2018-04-26 09:44:59,605 - synapse.http.server - 196 - ERROR - PUT-79 - Failed handle request synapse.http.server._async_render on <synapse.rest.ClientRestResource object at 0x7fce65a030d0>: <XForwardedForRequest at 0x7fce64702758 method=PUT uri=/_matrix/client/r0/rooms/!AFsEGZHXWuEnTVIScB:localhost/send/m.room.message/1524728701656 clientproto=HTTP/1.1 site=8008>: Traceback (most recent call last):
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1442, in gotResult
    _inlineCallbacks(r, g, deferred)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
--- <exception caught here> ---
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/http/server.py", line 167, in wrapped_request_handler
    yield request_handler(self, request, request_metrics)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/http/server.py", line 312, in _async_render
    callback_return = yield callback(request, **kwargs)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/rest/client/v1/room.py", line 215, in on_POST
    txn_id=txn_id,
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/handlers/message.py", line 564, in create_and_send_nonmember_event
    txn_id=txn_id
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/handlers/message.py", line 489, in create_event
    prev_event_ids=prev_event_ids,
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/python/failure.py", line 408, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/util/metrics.py", line 95, in measured_func
    r = yield func(self, *args, **kwargs)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/twisted/internet/defer.py", line 1386, in _inlineCallbacks
    result = g.send(result)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/handlers/message.py", line 635, in create_new_client_event
    builder, self.server_name, signing_key
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/crypto/event_signing.py", line 110, in add_hashes_and_signatures
    name, digest = compute_content_hash(event, hash_algorithm=hash_algorithm)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/synapse/crypto/event_signing.py", line 71, in compute_content_hash
    event_json_bytes = encode_canonical_json(event_json)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/canonicaljson.py", line 142, in encode_canonical_json
    return _unascii(s)
  File "/var/synapse/.synapse/lib/python2.7/site-packages/canonicaljson.py", line 121, in _unascii
    chunks.append(unichr(c))
exceptions.ValueError: unichr() arg not in range(0x10000) (narrow Python build)
2018-04-26 09:44:59,608 - synapse.access.http.8008 - 93 - INFO - PUT-79 - 96.13.231.25 - 8008 - {@tokodomo:localhost} Processed request: 24ms (12ms, 0ms) (1ms/9ms/1) 55B 500 "PUT /_matrix/client/r0/rooms/!AFsEGZHXWuEnTVIScB:localhost/send/m.room.message/1524728701656 HTTP/1.1" "Riot.im/0.8.7 (Linux; U; Android 8.1.0; Nexus 5X Build/OPM2.171019.02; Flavour GooglePlay; MatrixAndroidSDK 0.9.3)"
...
richvdh commented 6 years ago

exceptions.ValueError: unichr() arg not in range(0x10000) (narrow Python build)

Oh man. It looks like some builds of python don't support unicode characters > 0x10000 in strings: http://wordaligned.org/articles/narrow-python

This is really a bug in https://github.com/matrix-org/python-canonicaljson. I have raised https://github.com/matrix-org/python-canonicaljson/issues/12.

neilisfragile commented 6 years ago

given matrix-org/python-canonicaljson#12 closing this issue

richvdh commented 6 years ago

sorry neil, let's keep this one open to track the bug on the synapse side

Tokodomo commented 6 years ago

I overcame the issue by building/installing Python (with --enable-unicode=ucs4 -> wide version) and SQLite from source locally (to a local directory). On Debian it looks like this:

sudo apt-get install build-essential bzip2 libbz2-dev libncursesw5-dev lzma-dev liblz-dev liblzma-dev tk8.5-dev libreadline6 libreadline6-dev libssl-dev libgdbm-dev libc6-dev tk-dev libdb-dev

cd /var/synapse
mkdir tmpsrc
cd tmpsrc

wget https://www.sqlite.org/2018/sqlite-autoconf-3230100.tar.gz
tar -xf sqlite-autoconf-3230100.tar.gz
cd sqlite-autoconf-3230100
mkdir build
cd build
../configure --prefix=/var/synapse/.sqlite3 --disable-static CFLAGS="-DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_MAX_SCHEMA_RETRY=25 -DSQLITE_OMIT_LOOKASIDE -DSQLITE_SECURE_DELETE -DSQLITE_SOUNDEX -DSQLITE_TEMP_STORE=1 -DSQLITE_THREADSAFE=1 -lm -O2"
make
make install

cd ../..

wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
tar -xf Python-2.7.15.tgz
cd Python-2.7.15/
mkdir build
cd build
LD_RUN_PATH=/var/synapse/.sqlite3/lib CXX=g++ ../configure --prefix=/var/synapse/.python2.7 --enable-unicode=ucs4 --enable-optimizations LDFLAGS="-L/var/synapse/.sqlite3/lib" CPPFLAGS="-I/var/synapse/.sqlite3/include"
LD_RUN_PATH=/var/synapse/.sqlite3/lib make
LD_RUN_PATH=/var/synapse/.sqlite3/lib make test
LD_RUN_PATH=/var/synapse/.sqlite3/lib make install

cd ../../..

wget https://bootstrap.pypa.io/get-pip.py
.python2.7/bin/python get-pip.py
rm get-pip.py

.python2.7/bin/pip install virtualenv
export LC_ALL=C
.python2.7/bin/virtualenv -p .python2.7/bin/python2.7 ~/.synapse
source ~/.synapse/bin/activate
pip install https://github.com/matrix-org/synapse/archive/v0.28.1.tar.gz
mpwp commented 6 years ago

Emojis are back by installing canonicaljson from git:

pip install --upgrade git+https://github.com/matrix-org/python-canonicaljson/

Thank you very much!

richvdh commented 6 years ago

Thanks for the feedback. canonicaljson 1.1.4 is now relased with the fix.