lib/mp3file/mp3_file.rb in mp3file-0.0.2 vs lib/mp3file/mp3_file.rb in mp3file-0.0.3
- old
+ new
@@ -1,6 +1,8 @@
module Mp3file
+ class InvalidMP3FileError < Mp3fileError; end
+
class MP3File
attr_reader(:file, :file_size, :audio_size)
attr_reader(:first_header_offset, :first_header)
attr_reader(:xing_header_offset, :xing_header)
attr_reader(:vbri_header_offset, :vbri_header)
@@ -144,19 +146,24 @@
if offset && offset != file.tell
file.seek(offset, IO::SEEK_SET)
end
header = nil
+ initial_header_offset = file.tell
header_offset = file.tell
while header.nil?
begin
header = MP3Header.new(file)
header_offset = file.tell - 4
rescue InvalidMP3HeaderError => e
header_offset += 1
- file.seek(header_offset, IO::SEEK_SET)
- retry
+ if header_offset - initial_header_offset > 4096
+ raise InvalidMP3FileError, "Could not find a valid MP3 header in the first 4096 bytes."
+ else
+ file.seek(header_offset, IO::SEEK_SET)
+ retry
+ end
end
# byte = file.readbyte
# while byte != 0xFF
# byte = file.readbyte