diff --git a/lib/meta_inspector/parsers/images.rb b/lib/meta_inspector/parsers/images.rb index 5f5ada1f..835a63d8 100644 --- a/lib/meta_inspector/parsers/images.rb +++ b/lib/meta_inspector/parsers/images.rb @@ -35,7 +35,7 @@ def owner_suggested # filtered for images that are more square than 10:1 or 1:10 def largest() @larget_image ||= begin - img_nodes = parsed.search('//img') + img_nodes = parsed.search('//img').select{ |img_node| img_node['src'] } sizes = img_nodes.map { |img_node| [URL.absolutify(img_node['src'], base_url), img_node['width'], img_node['height']] } sizes.uniq! { |url, width, height| url } if @download_images diff --git a/spec/fixtures/malformed_image_in_html.response b/spec/fixtures/malformed_image_in_html.response new file mode 100644 index 00000000..08b2b974 --- /dev/null +++ b/spec/fixtures/malformed_image_in_html.response @@ -0,0 +1,23 @@ +HTTP/1.1 200 OK +Server: nginx/0.7.67 +Date: Fri, 18 Nov 2011 21:46:46 GMT +Content-Type: text/html +Connection: keep-alive +Last-Modified: Mon, 14 Nov 2011 16:53:18 GMT +Content-Length: 4987 +X-Varnish: 2000423390 +Age: 0 +Via: 1.1 varnish + + + + An example page + + + + + + + + + diff --git a/spec/meta_inspector/images_spec.rb b/spec/meta_inspector/images_spec.rb index abee3c61..d64ac3d6 100644 --- a/spec/meta_inspector/images_spec.rb +++ b/spec/meta_inspector/images_spec.rb @@ -88,6 +88,13 @@ expect(page.images.best).to eq("http://example.com/100x100") end + + it "should find image when some img tag has no src attribute" do + page = MetaInspector.new('http://example.com/malformed_image_in_html') + + expect(page.images.best).to eq("http://example.com/largest") + end + end describe "images.owner_suggested" do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e5ec441a..f6e6474f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -36,6 +36,7 @@ def fixture_file(filename) # Used to test largest image in page logic FakeWeb.register_uri(:get, "http://example.com/largest_image_in_html", :response => fixture_file("largest_image_in_html.response")) FakeWeb.register_uri(:get, "http://example.com/largest_image_using_image_size", :response => fixture_file("largest_image_using_image_size.response")) +FakeWeb.register_uri(:get, "http://example.com/malformed_image_in_html", :response => fixture_file("malformed_image_in_html.response")) FakeWeb.register_uri(:get, "http://example.com/10x10", :response => fixture_file("10x10.jpg.response")) FakeWeb.register_uri(:get, "http://example.com/100x100", :response => fixture_file("100x100.jpg.response"))