diff options
author | Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> | 2019-05-10 10:32:44 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-10 10:32:44 -0700 |
commit | 2f48c4e1ae40869a1bc5dcb36557ad0a0d8a5728 (patch) | |
tree | 7b83d18d61d1eaaa38e705ace989ea3cdcb2c82c /synapse/rest/media | |
parent | Revert 085ae346ace418e0fc043ac5f568f85ebf80038e (diff) | |
download | synapse-2f48c4e1ae40869a1bc5dcb36557ad0a0d8a5728.tar.xz |
URL preview blacklisting fixes (#5155)
Prevents a SynapseError being raised inside of a IResolutionReceiver and instead opts to just return 0 results. This thus means that we have to lump a failed lookup and a blacklisted lookup together with the same error message, but the substitute should be generic enough to cover both cases.
Diffstat (limited to 'synapse/rest/media')
-rw-r--r-- | synapse/rest/media/v1/preview_url_resource.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/synapse/rest/media/v1/preview_url_resource.py b/synapse/rest/media/v1/preview_url_resource.py index ba3ab1d37d..acf87709f2 100644 --- a/synapse/rest/media/v1/preview_url_resource.py +++ b/synapse/rest/media/v1/preview_url_resource.py @@ -31,6 +31,7 @@ from six.moves import urllib_parse as urlparse from canonicaljson import json from twisted.internet import defer +from twisted.internet.error import DNSLookupError from twisted.web.resource import Resource from twisted.web.server import NOT_DONE_YET @@ -328,9 +329,18 @@ class PreviewUrlResource(Resource): # handler will return a SynapseError to the client instead of # blank data or a 500. raise + except DNSLookupError: + # DNS lookup returned no results + # Note: This will also be the case if one of the resolved IP + # addresses is blacklisted + raise SynapseError( + 502, "DNS resolution failure during URL preview generation", + Codes.UNKNOWN + ) except Exception as e: # FIXME: pass through 404s and other error messages nicely logger.warn("Error downloading %s: %r", url, e) + raise SynapseError( 500, "Failed to download content: %s" % ( traceback.format_exception_only(sys.exc_info()[0], e), |