From 5afc3e463702a699f0ae8d34bd85beb5bde34583 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Sun, 3 Jun 2018 18:07:59 +0200 Subject: [PATCH] Fix #266: Ensure we do not store bad mimetypes --- api/funkwhale_api/music/utils.py | 4 ++-- api/tests/music/test_utils.py | 8 ++++++-- changes/changelog.d/266.bugfix | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 changes/changelog.d/266.bugfix diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index f11e4507a..3b9fbb214 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -43,9 +43,9 @@ def get_query(query_string, search_fields): def guess_mimetype(f): - b = min(100000, f.size) + b = min(1000000, f.size) t = magic.from_buffer(f.read(b), mime=True) - if t == 'application/octet-stream': + if not t.startswith('audio/'): # failure, we try guessing by extension mt, _ = mimetypes.guess_type(f.path) if mt: diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py index 12b381a99..7b967dbbc 100644 --- a/api/tests/music/test_utils.py +++ b/api/tests/music/test_utils.py @@ -15,9 +15,13 @@ def test_guess_mimetype_try_using_extension(factories, mocker): assert utils.guess_mimetype(f.audio_file) == 'audio/mpeg' -def test_guess_mimetype_try_using_extension_if_fail(factories, mocker): +@pytest.mark.parametrize('wrong', [ + 'application/octet-stream', + 'application/x-empty', +]) +def test_guess_mimetype_try_using_extension_if_fail(wrong, factories, mocker): mocker.patch( - 'magic.from_buffer', return_value='application/octet-stream') + 'magic.from_buffer', return_value=wrong) f = factories['music.TrackFile'].build( audio_file__filename='test.mp3') diff --git a/changes/changelog.d/266.bugfix b/changes/changelog.d/266.bugfix new file mode 100644 index 000000000..c282afe7d --- /dev/null +++ b/changes/changelog.d/266.bugfix @@ -0,0 +1 @@ +Ensure we do not store bad mimetypes (such as application/x-empty) (#266)