diff --git a/beets/mediafile.py b/beets/mediafile.py index 99615203c..c5f88d929 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -1016,11 +1016,15 @@ class DateField(MediaField): datestring = MediaField.__get__(self, mediafile, None) datestring = re.sub(r'[Tt ].*$', '', unicode(datestring)) items = unicode(datestring).split('-') + # A date with more than 3 components is not a date we understand. In + # that case, act like we saw no date components. + if len(items) > 3: + items = [] items = items + [None] * (3 - len(items)) if not items[0] and hasattr(self, '_year_field'): # Fallback to addition year field items[0] = self._year_field.__get__(mediafile) - return [int(item or 0) for item in items] + return [_safe_cast(int, item) for item in items] def _set_date_tuple(self, mediafile, year, month=None, day=None): date = [year or 0] diff --git a/test/rsrc/unparseable.alac.m4a b/test/rsrc/unparseable.alac.m4a new file mode 100644 index 000000000..41af16953 Binary files /dev/null and b/test/rsrc/unparseable.alac.m4a differ diff --git a/test/rsrc/unparseable.ape b/test/rsrc/unparseable.ape new file mode 100644 index 000000000..7c4fa260f Binary files /dev/null and b/test/rsrc/unparseable.ape differ diff --git a/test/rsrc/unparseable.flac b/test/rsrc/unparseable.flac new file mode 100644 index 000000000..c587ab0d3 Binary files /dev/null and b/test/rsrc/unparseable.flac differ diff --git a/test/rsrc/unparseable.m4a b/test/rsrc/unparseable.m4a new file mode 100644 index 000000000..766439636 Binary files /dev/null and b/test/rsrc/unparseable.m4a differ diff --git a/test/rsrc/unparseable.mp3 b/test/rsrc/unparseable.mp3 new file mode 100644 index 000000000..bff454ef7 Binary files /dev/null and b/test/rsrc/unparseable.mp3 differ diff --git a/test/rsrc/unparseable.mpc b/test/rsrc/unparseable.mpc new file mode 100644 index 000000000..3dd7d5798 Binary files /dev/null and b/test/rsrc/unparseable.mpc differ diff --git a/test/rsrc/unparseable.ogg b/test/rsrc/unparseable.ogg new file mode 100644 index 000000000..8cdc0e2b0 Binary files /dev/null and b/test/rsrc/unparseable.ogg differ diff --git a/test/rsrc/unparseable.opus b/test/rsrc/unparseable.opus new file mode 100644 index 000000000..ca26834e8 Binary files /dev/null and b/test/rsrc/unparseable.opus differ diff --git a/test/rsrc/unparseable.wma b/test/rsrc/unparseable.wma new file mode 100644 index 000000000..5df6fbee2 Binary files /dev/null and b/test/rsrc/unparseable.wma differ diff --git a/test/rsrc/unparseable.wv b/test/rsrc/unparseable.wv new file mode 100644 index 000000000..7a141bc2a Binary files /dev/null and b/test/rsrc/unparseable.wv differ diff --git a/test/test_mediafile.py b/test/test_mediafile.py index e8ec31ed2..92035825b 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -467,6 +467,11 @@ class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin): self.assertEqual(mediafile.disc, 10) self.assertEqual(mediafile.disctotal, 0) + def test_unparseable_date(self): + mediafile = self._mediafile_fixture('unparseable') + + self.assertEqual(mediafile.year, 0) + self.assertEqual(mediafile.date, datetime.date.min) def assertTags(self, mediafile, tags): __unittest = True