encode filenames as ascii instead of latin-1

latin-1 is allowed by pep3333, but that breaks gunicorn
This commit is contained in:
David Lord 2018-05-28 06:26:27 -07:00
parent 401d7f9bb2
commit b51ab3ff2c
No known key found for this signature in database
GPG key ID: 7A1C87E3F5BC42A8
3 changed files with 27 additions and 10 deletions

View file

@ -638,15 +638,22 @@ class TestSendfile(object):
assert options['filename'] == 'index.txt'
rv.close()
def test_attachment_with_utf8_filename(self, app, req_ctx):
rv = flask.send_file('static/index.html', as_attachment=True, attachment_filename=u'Ñandúpingüino.txt')
content_disposition = set(rv.headers['Content-Disposition'].split('; '))
assert content_disposition == set((
'attachment',
'filename="Nandu/pinguino.txt"',
"filename*=UTF-8''%C3%91and%C3%BA%EF%BC%8Fping%C3%BCino.txt"
))
@pytest.mark.usefixtures('req_ctx')
@pytest.mark.parametrize(('filename', 'ascii', 'utf8'), (
('index.html', 'index.html', False),
(u'Ñandúpingüino.txt', '"Nandu/pinguino.txt"',
'%C3%91and%C3%BA%EF%BC%8Fping%C3%BCino.txt'),
(u'Vögel.txt', 'Vogel.txt', 'V%C3%B6gel.txt'),
))
def test_attachment_filename_encoding(self, filename, ascii, utf8):
rv = flask.send_file('static/index.html', as_attachment=True, attachment_filename=filename)
rv.close()
content_disposition = rv.headers['Content-Disposition']
assert 'filename=%s' % ascii in content_disposition
if utf8:
assert "filename*=UTF-8''" + utf8 in content_disposition
else:
assert "filename*=UTF-8''" not in content_disposition
def test_static_file(self, app, req_ctx):
# default cache timeout is 12 hours