mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2025-05-02 11:16:03 -04:00
Limit the size of HTTP responses read over federation. (#9833)
This commit is contained in:
parent
c1ddbbde4f
commit
51a20914a8
4 changed files with 110 additions and 8 deletions
|
@ -33,6 +33,7 @@ import treq
|
|||
from canonicaljson import encode_canonical_json
|
||||
from netaddr import AddrFormatError, IPAddress, IPSet
|
||||
from prometheus_client import Counter
|
||||
from typing_extensions import Protocol
|
||||
from zope.interface import implementer, provider
|
||||
|
||||
from OpenSSL import SSL
|
||||
|
@ -754,6 +755,16 @@ def _timeout_to_request_timed_out_error(f: Failure):
|
|||
return f
|
||||
|
||||
|
||||
class ByteWriteable(Protocol):
|
||||
"""The type of object which must be passed into read_body_with_max_size.
|
||||
|
||||
Typically this is a file object.
|
||||
"""
|
||||
|
||||
def write(self, data: bytes) -> int:
|
||||
pass
|
||||
|
||||
|
||||
class BodyExceededMaxSize(Exception):
|
||||
"""The maximum allowed size of the HTTP body was exceeded."""
|
||||
|
||||
|
@ -790,7 +801,7 @@ class _ReadBodyWithMaxSizeProtocol(protocol.Protocol):
|
|||
transport = None # type: Optional[ITCPTransport]
|
||||
|
||||
def __init__(
|
||||
self, stream: BinaryIO, deferred: defer.Deferred, max_size: Optional[int]
|
||||
self, stream: ByteWriteable, deferred: defer.Deferred, max_size: Optional[int]
|
||||
):
|
||||
self.stream = stream
|
||||
self.deferred = deferred
|
||||
|
@ -830,7 +841,7 @@ class _ReadBodyWithMaxSizeProtocol(protocol.Protocol):
|
|||
|
||||
|
||||
def read_body_with_max_size(
|
||||
response: IResponse, stream: BinaryIO, max_size: Optional[int]
|
||||
response: IResponse, stream: ByteWriteable, max_size: Optional[int]
|
||||
) -> defer.Deferred:
|
||||
"""
|
||||
Read a HTTP response body to a file-object. Optionally enforcing a maximum file size.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue