Pass the proper type when uploading files. (#11927)
The Content-Length header should be treated as an int, not
a string. This shouldn't have any user-facing change.
2 files changed, 10 insertions, 4 deletions
diff --git a/changelog.d/11927.misc b/changelog.d/11927.misc
new file mode 100644
index 0000000000..22c58521c9
--- /dev/null
+++ b/changelog.d/11927.misc
@@ -0,0 +1 @@
+Use the proper type for the Content-Length header in the `UploadResource`.
diff --git a/synapse/rest/media/v1/upload_resource.py b/synapse/rest/media/v1/upload_resource.py
index 8162094cf6..fde28d08cb 100644
--- a/synapse/rest/media/v1/upload_resource.py
+++ b/synapse/rest/media/v1/upload_resource.py
@@ -49,10 +49,14 @@ class UploadResource(DirectServeJsonResource):
async def _async_render_POST(self, request: SynapseRequest) -> None:
requester = await self.auth.get_user_by_req(request)
- content_length = request.getHeader("Content-Length")
- if content_length is None:
+ raw_content_length = request.getHeader("Content-Length")
+ if raw_content_length is None:
raise SynapseError(msg="Request must specify a Content-Length", code=400)
- if int(content_length) > self.max_upload_size:
+ try:
+ content_length = int(raw_content_length)
+ except ValueError:
+ raise SynapseError(msg="Content-Length value is invalid", code=400)
+ if content_length > self.max_upload_size:
raise SynapseError(
msg="Upload request body is too large",
code=413,
@@ -66,7 +70,8 @@ class UploadResource(DirectServeJsonResource):
upload_name: Optional[str] = upload_name_bytes.decode("utf8")
except UnicodeDecodeError:
raise SynapseError(
- msg="Invalid UTF-8 filename parameter: %r" % (upload_name), code=400
+ msg="Invalid UTF-8 filename parameter: %r" % (upload_name_bytes,),
+ code=400,
)
# If the name is falsey (e.g. an empty byte string) ensure it is None.
|