diff --git a/lib/css_parser/parser.rb b/lib/css_parser/parser.rb index 7a3e079..c7828b9 100644 --- a/lib/css_parser/parser.rb +++ b/lib/css_parser/parser.rb @@ -604,6 +604,12 @@ def read_remote_file(uri) # :nodoc: end end + unless res.content_type == "text/css" + @redirect_count = nil + raise RemoteFileError.new(uri.to_s) if @options[:io_exceptions] + return '', nil + end + case res['content-encoding'] when 'gzip' io = Zlib::GzipReader.new(StringIO.new(res.body)) @@ -614,6 +620,7 @@ def read_remote_file(uri) # :nodoc: end end + if charset if String.method_defined?(:encode) src.encode!('UTF-8', charset) diff --git a/test/fixtures/LadylikeBB.otf b/test/fixtures/LadylikeBB.otf new file mode 100644 index 0000000..804fe9e Binary files /dev/null and b/test/fixtures/LadylikeBB.otf differ diff --git a/test/test_css_parser_loading.rb b/test/test_css_parser_loading.rb index 5177475..e6a402d 100644 --- a/test/test_css_parser_loading.rb +++ b/test/test_css_parser_loading.rb @@ -207,4 +207,18 @@ def test_toggling_not_found_exceptions cp_without_exceptions.load_uri!("#{@uri_base}/no-exist.xyz") end + + def test_invalid_content_type + cp_with_exceptions = Parser.new(:io_exceptions => true) + + err = assert_raises RemoteFileError do + cp_with_exceptions.load_uri!("#{@uri_base}/LadylikeBB.otf") + end + + assert_includes err.message, "#{@uri_base}/LadylikeBB.otf" + + cp_without_exceptions = Parser.new(:io_exceptions => false) + + cp_without_exceptions.load_uri!("#{@uri_base}/LadylikeBB.otf") + end end