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