From dd0a4df914496e77d3000214335955a2b555f24b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 9 Nov 2021 11:54:44 +0100 Subject: [PATCH] Fix error 500 on non-ASCII attachment file names --- src/pretix/api/views/exporters.py | 2 +- src/pretix/base/views/cachedfiles.py | 2 +- src/pretix/presale/views/cart.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pretix/api/views/exporters.py b/src/pretix/api/views/exporters.py index c87893d2c5..a4823bd290 100644 --- a/src/pretix/api/views/exporters.py +++ b/src/pretix/api/views/exporters.py @@ -69,7 +69,7 @@ class ExportersMixin: cf = get_object_or_404(CachedFile, id=kwargs['cfid']) if cf.file: resp = ChunkBasedFileResponse(cf.file.file, content_type=cf.type) - resp['Content-Disposition'] = 'attachment; filename="{}"'.format(cf.filename) + resp['Content-Disposition'] = 'attachment; filename="{}"'.format(cf.filename).encode("ascii", "ignore") return resp elif not settings.HAS_CELERY: return Response( diff --git a/src/pretix/base/views/cachedfiles.py b/src/pretix/base/views/cachedfiles.py index b95e5ab7e4..c0690a475d 100644 --- a/src/pretix/base/views/cachedfiles.py +++ b/src/pretix/base/views/cachedfiles.py @@ -47,7 +47,7 @@ class DownloadView(TemplateView): return HttpResponse('1' if self.object.file else '0') elif self.object.file: resp = ChunkBasedFileResponse(self.object.file.file, content_type=self.object.type) - resp['Content-Disposition'] = 'attachment; filename="{}"'.format(self.object.filename) + resp['Content-Disposition'] = 'attachment; filename="{}"'.format(self.object.filename).encode('ascii', 'ignore') return resp else: return super().get(request, *args, **kwargs) diff --git a/src/pretix/presale/views/cart.py b/src/pretix/presale/views/cart.py index b1be0668f2..8e05a98160 100644 --- a/src/pretix/presale/views/cart.py +++ b/src/pretix/presale/views/cart.py @@ -661,5 +661,5 @@ class AnswerDownload(EventViewMixin, View): resp['Content-Disposition'] = 'attachment; filename="{}-cart-{}"'.format( self.request.event.slug.upper(), os.path.basename(answer.file.name).split('.', 1)[1] - ) + ).encode("ascii", "ignore") return resp