fix crasher w/ old APE files (#159)

This commit is contained in:
Adrian Sampson 2011-04-02 17:48:54 -07:00
parent 6b49bb11ae
commit d4d74dd68b
4 changed files with 13 additions and 4 deletions

1
NEWS
View file

@ -41,6 +41,7 @@
* Fix a bug where some files would be erroneously interpreted as MP4.
* Fix permission bits applied to album art files.
* Fix malformed MusicBrainz queries caused by null characters.
# Fix a bug with old versions of the Monkey's Audio format.
* Retry in more cases when MusicBrainz servers are slow/overloaded.
* The old "albumify" plugin for upgrading databases was removed.

View file

@ -715,10 +715,14 @@ class MediaFile(object):
@property
def bitrate(self):
if self.type in ('flac', 'ape'):
# Simulate bitrate for lossless formats.
#fixme: The utility of this guess is questionable.
return self.mgfile.info.sample_rate * \
self.mgfile.info.bits_per_sample
if hasattr(self.mgfile.info, 'bits_per_sample'):
# Simulate bitrate for lossless formats.
#fixme: The utility of this guess is questionable.
return self.mgfile.info.sample_rate * \
self.mgfile.info.bits_per_sample
else:
# Old APE file format.
return 0
elif self.type == 'wv':
# Mutagen doesn't provide enough information.
return 0

BIN
test/rsrc/oldape.ape Normal file

Binary file not shown.

View file

@ -63,6 +63,10 @@ class EdgeTest(unittest.TestCase):
self.assertEqual(f.disc, 4)
self.assertEqual(f.disctotal, 5)
def test_old_ape_version_bitrate(self):
f = beets.mediafile.MediaFile(os.path.join('rsrc', 'oldape.ape'))
self.assertEqual(f.bitrate, 0)
_sc = beets.mediafile._safe_cast
class InvalidValueToleranceTest(unittest.TestCase):
def test_packed_integer_with_extra_chars(self):