From e55c3e8acf7708f1f548a12d393b9914558fbdbb Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Mon, 14 Mar 2022 10:35:39 -0400 Subject: [PATCH] Check for CBOR content-encoding header in client. --- src/allmydata/storage/http_client.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/allmydata/storage/http_client.py b/src/allmydata/storage/http_client.py index d0ae4b584..7458f9271 100644 --- a/src/allmydata/storage/http_client.py +++ b/src/allmydata/storage/http_client.py @@ -58,8 +58,14 @@ class ClientException(Exception): def _decode_cbor(response): """Given HTTP response, return decoded CBOR body.""" if response.code > 199 and response.code < 300: - return treq.content(response).addCallback(loads) - return fail(ClientException(response.code, response.phrase)) + if response.headers.getRawHeaders("content-type") == ["application/cbor"]: + # TODO limit memory usage + # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3872 + return treq.content(response).addCallback(loads) + else: + raise ClientException(-1, "Server didn't send CBOR") + else: + return fail(ClientException(response.code, response.phrase)) @attr.s