kopia lustrzana https://gitlab.com/jaywink/federation
Don't crash on malformed NodeInfo doc
Don't crash when parsing an invalid NodeInfo document where the usage dictionary is not following specification. Some Pleroma instances have started writing an object there.merge-requests/159/merge
rodzic
91dc3ca312
commit
9700af7bee
|
@ -8,7 +8,10 @@
|
||||||
|
|
||||||
* Add missing `response.raise_for_status()` call to the `fetch_document` network helper
|
* Add missing `response.raise_for_status()` call to the `fetch_document` network helper
|
||||||
when fetching with given URL. Error status was already being raised correctly when
|
when fetching with given URL. Error status was already being raised correctly when
|
||||||
fetching by domain and path.
|
fetching by domain and path.
|
||||||
|
|
||||||
|
* Don't crash when parsing an invalid NodeInfo document where the usage dictionary
|
||||||
|
is not following specification.
|
||||||
|
|
||||||
## [0.19.0] - 2019-12-15
|
## [0.19.0] - 2019-12-15
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,8 @@ defaults = {
|
||||||
|
|
||||||
|
|
||||||
def int_or_none(value):
|
def int_or_none(value):
|
||||||
|
if isinstance(value, dict):
|
||||||
|
return None
|
||||||
if value is None or value == '':
|
if value is None or value == '':
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -70,6 +70,13 @@ NODEINFO_20_DOC = '{"version":"2.0","software":{"name":"diaspora","version":"0.7
|
||||||
'22,"localComments":17671},"metadata":{"nodeName":"I Like Toast","xmppChat":false,"camo":{"' \
|
'22,"localComments":17671},"metadata":{"nodeName":"I Like Toast","xmppChat":false,"camo":{"' \
|
||||||
'markdown":false,"opengraph":false,"remotePods":false},"adminAccount":"podmin"}}'
|
'markdown":false,"opengraph":false,"remotePods":false},"adminAccount":"podmin"}}'
|
||||||
|
|
||||||
|
# Some Pleroma instances don't conform to NodeInfo spec
|
||||||
|
NODEINFO_21_DOC_INVALID_USAGE_COUNTS = \
|
||||||
|
'{"version":"2.1","software":{"name":"pleroma","version":"0.7.4.0-pd0313756"},"protocols":' \
|
||||||
|
'["activitypub"],"services":{"inbound":[],"outbound":[]},"openRegistrations"' \
|
||||||
|
':true,"usage":{"users":{"total":348},"localPosts":{"all":3,"direct":1}},' \
|
||||||
|
'"metadata":{}}'
|
||||||
|
|
||||||
# Buggy NodeInfo well known found in certain older Hubzilla versions
|
# Buggy NodeInfo well known found in certain older Hubzilla versions
|
||||||
NODEINFO_WELL_KNOWN_BUGGY = '{"links":{"rel":"http:\/\/nodeinfo.diaspora.software\/ns\/schema\/1.0","href":"h' \
|
NODEINFO_WELL_KNOWN_BUGGY = '{"links":{"rel":"http:\/\/nodeinfo.diaspora.software\/ns\/schema\/1.0","href":"h' \
|
||||||
'ttps:\/\/example.com\/nodeinfo\/1.0"},"0":{"rel":"http:\/\/nodeinfo.diaspo' \
|
'ttps:\/\/example.com\/nodeinfo\/1.0"},"0":{"rel":"http:\/\/nodeinfo.diaspo' \
|
||||||
|
|
|
@ -6,7 +6,8 @@ from federation.hostmeta.parsers import (
|
||||||
parse_mastodon_document, parse_matrix_document)
|
parse_mastodon_document, parse_matrix_document)
|
||||||
from federation.tests.fixtures.hostmeta import (
|
from federation.tests.fixtures.hostmeta import (
|
||||||
NODEINFO2_10_DOC, NODEINFO_10_DOC, NODEINFO_20_DOC, STATISTICS_JSON_DOC, MASTODON_DOC, MASTODON_ACTIVITY_DOC,
|
NODEINFO2_10_DOC, NODEINFO_10_DOC, NODEINFO_20_DOC, STATISTICS_JSON_DOC, MASTODON_DOC, MASTODON_ACTIVITY_DOC,
|
||||||
MASTODON_RC_DOC, MASTODON_DOC_NULL_CONTACT, MATRIX_SYNAPSE_DOC, PLEROMA_MASTODON_API_DOC)
|
MASTODON_RC_DOC, MASTODON_DOC_NULL_CONTACT, MATRIX_SYNAPSE_DOC, PLEROMA_MASTODON_API_DOC,
|
||||||
|
NODEINFO_21_DOC_INVALID_USAGE_COUNTS)
|
||||||
|
|
||||||
|
|
||||||
class TestIntOrNone:
|
class TestIntOrNone:
|
||||||
|
@ -260,6 +261,36 @@ class TestParseNodeInfoDocument:
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def test_parse_nodeinfo_21_document__invalid_usage_counts(self):
|
||||||
|
result = parse_nodeinfo_document(json.loads(NODEINFO_21_DOC_INVALID_USAGE_COUNTS), 'pleroma.local')
|
||||||
|
assert result == {
|
||||||
|
'organization': {
|
||||||
|
'account': '',
|
||||||
|
'contact': '',
|
||||||
|
'name': '',
|
||||||
|
},
|
||||||
|
'host': 'pleroma.local',
|
||||||
|
'name': 'pleroma.local',
|
||||||
|
'open_signups': True,
|
||||||
|
'protocols': ["activitypub"],
|
||||||
|
'relay': '',
|
||||||
|
'server_meta': {},
|
||||||
|
'services': [],
|
||||||
|
'platform': 'pleroma',
|
||||||
|
'version': '0.7.4.0-pd0313756',
|
||||||
|
'features': {},
|
||||||
|
'activity': {
|
||||||
|
'users': {
|
||||||
|
'total': 348,
|
||||||
|
'half_year': None,
|
||||||
|
'monthly': None,
|
||||||
|
'weekly': None,
|
||||||
|
},
|
||||||
|
'local_posts': None,
|
||||||
|
'local_comments': None,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class TestParseNodeInfo2Document:
|
class TestParseNodeInfo2Document:
|
||||||
def test_parse_nodeinfo2_10_document(self):
|
def test_parse_nodeinfo2_10_document(self):
|
||||||
|
|
Ładowanie…
Reference in New Issue