From ab5d6e51d903303128b71d73c09239a07377feb9 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Thu, 9 Jun 2011 16:27:23 -0400 Subject: [PATCH] updated importer to validate that sprites are png files --- lib/compass/sprite_importer.rb | 10 ++++++++++ .../images/bad_extensions/ten-by-ten.gif | Bin 0 -> 2804 bytes .../images/bad_extensions/twenty-by-twenty.jpg | Bin 0 -> 2799 bytes test/units/sprites/importer_test.rb | 17 +++++++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 test/fixtures/sprites/public/images/bad_extensions/ten-by-ten.gif create mode 100644 test/fixtures/sprites/public/images/bad_extensions/twenty-by-twenty.jpg diff --git a/lib/compass/sprite_importer.rb b/lib/compass/sprite_importer.rb index 83d3692d..0d92fda9 100644 --- a/lib/compass/sprite_importer.rb +++ b/lib/compass/sprite_importer.rb @@ -3,6 +3,7 @@ module Compass attr_accessor :uri, :options VAILD_FILE_NAME = /\A#{Sass::SCSS::RX::IDENT}\Z/ SPRITE_IMPORTER_REGEX = %r{((.+/)?([^\*.]+))/(.+?)\.png} + VALID_EXTENSIONS = ['.png'] def self.load(uri, options) klass = Compass::SpriteImporter.new @@ -89,6 +90,14 @@ module Compass end end + def validate_sprites! + files.each do |file| + unless VALID_EXTENSIONS.include? File.extname(file) + raise Compass::Error, "Invalid sprite extension only: #{VALID_EXTENSIONS.join(',')} images are allowed" + end + end + end + # Returns the sass options for this sprite def sass_options @sass_options ||= options.merge(:filename => name, :syntax => :scss, :importer => self) @@ -96,6 +105,7 @@ module Compass # Returns a Sass::Engine for this sprite object def sass_engine + validate_sprites! Sass::Engine.new(content_for_images, sass_options) end diff --git a/test/fixtures/sprites/public/images/bad_extensions/ten-by-ten.gif b/test/fixtures/sprites/public/images/bad_extensions/ten-by-ten.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0ae53ccadde24b58be417ca95dcb57eb6da4f1a GIT binary patch literal 2804 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 BIe!2E literal 0 HcmV?d00001 diff --git a/test/units/sprites/importer_test.rb b/test/units/sprites/importer_test.rb index 04f95c8b..d25bff1e 100644 --- a/test/units/sprites/importer_test.rb +++ b/test/units/sprites/importer_test.rb @@ -46,4 +46,21 @@ class ImporterTest < Test::Unit::TestCase assert_equal 'bar', @importer.sass_options[:foo] end + test "should fail givin bad sprite extensions" do + @images_src_path = File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'sprites', 'public', 'images') + file = StringIO.new("images_path = #{@images_src_path.inspect}\n") + Compass.add_configuration(file, "sprite_config") + importer = Compass::SpriteImporter.new(:uri => 'bad_extensions/*.jpg', :options => options) + begin + importer.sass_engine + assert false, "Somthing happened an invalid sprite file made it past validation" + rescue Compass::Error => e + assert e.message.include?('.png') + end + end + + def taredown + Compass.reset_configuration! + end + end \ No newline at end of file