diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index 2d8cee10f..ca4081000 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -53,6 +53,10 @@ INVALID_CHARS = re.compile('([^\x20-}]|=)') def sanitize_key(key): + """ + Remove characters from key which are invalid for a Vorbis comment field name. + See https://www.xiph.org/vorbis/doc/v-comment.html#vectorformat + """ return INVALID_CHARS.sub('', key) diff --git a/test/test_formats.py b/test/test_formats.py index 005dccfec..a06981830 100644 --- a/test/test_formats.py +++ b/test/test_formats.py @@ -19,7 +19,7 @@ from picard.coverart.image import ( TagCoverArtImage, ) import picard.formats -from picard.formats import ext_to_format +from picard.formats import ext_to_format, vorbis from picard.metadata import Metadata settings = { @@ -609,6 +609,12 @@ class OptimFROGDUalStreamTest(CommonTests.FormatsTest): self.assertEqual(metadata['~format'], 'OptimFROG DualStream Audio') +class VorbisUtilTest(PicardTestCase): + def test_sanitize_key(self): + sanitized = vorbis.sanitize_key(' \x1f=}~') + self.assertEqual(sanitized, ' }') + + cover_settings = { 'embed_only_one_front_image': True, }