From 6ce19b94e84eb6ad83ef303f88d8bd59a3d414e6 Mon Sep 17 00:00:00 2001 From: Neeeflix <35348173+Neeeflix@users.noreply.github.com> Date: Wed, 10 Nov 2021 21:49:43 +0100 Subject: [PATCH] Fix error in thumbnail generation (#11288) Signed-off-by: Jonas Zeunert --- changelog.d/11288.bugfix | 1 + synapse/rest/media/v1/thumbnailer.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 changelog.d/11288.bugfix diff --git a/changelog.d/11288.bugfix b/changelog.d/11288.bugfix new file mode 100644 index 000000000..d85b1779b --- /dev/null +++ b/changelog.d/11288.bugfix @@ -0,0 +1 @@ +Fix a long-standing bug where uploading extremely thin images (e.g. 1000x1) would fail. Contributed by @Neeeflix. diff --git a/synapse/rest/media/v1/thumbnailer.py b/synapse/rest/media/v1/thumbnailer.py index 46701a8b8..5e17664b5 100644 --- a/synapse/rest/media/v1/thumbnailer.py +++ b/synapse/rest/media/v1/thumbnailer.py @@ -101,8 +101,8 @@ class Thumbnailer: fits within the given rectangle:: (w_in / h_in) = (w_out / h_out) - w_out = min(w_max, h_max * (w_in / h_in)) - h_out = min(h_max, w_max * (h_in / w_in)) + w_out = max(min(w_max, h_max * (w_in / h_in)), 1) + h_out = max(min(h_max, w_max * (h_in / w_in)), 1) Args: max_width: The largest possible width. @@ -110,9 +110,9 @@ class Thumbnailer: """ if max_width * self.height < max_height * self.width: - return max_width, (max_width * self.height) // self.width + return max_width, max((max_width * self.height) // self.width, 1) else: - return (max_height * self.width) // self.height, max_height + return max((max_height * self.width) // self.height, 1), max_height def _resize(self, width: int, height: int) -> Image.Image: # 1-bit or 8-bit color palette images need converting to RGB