diff --git a/README.textile b/README.textile index 9f71c1e..c38e608 100644 --- a/README.textile +++ b/README.textile @@ -18,9 +18,10 @@ You only need supply the uri, and FastImage will do the rest. h2. Features -Fastimage can also read local (and other) files, and uses the Addressable library to do so. +Fastimage can also read local (and other) files - anything that is not parseable as a URI will be +interpreted as a filename, and FastImage will attempt to open it with File#open. -FastImage will automatically read from any object that responds to :read - for +FastImage will also automatically read from any object that responds to :read - for instance an IO object if that is passed instead of a URI. FastImage will follow up to 4 HTTP redirects to get the image. @@ -31,6 +32,10 @@ You can add a timeout to the request which will limit the request time by passin FastImage normally replies will nil if it encounters an error, but you can pass :raise_on_failure => true to get an exception. +h2. Security + +As of v1.6.7 FastImage no longer uses openuri to open files, but directly calls File.open. But take care to sanitise the strings passed to FastImage; it will try to read from whatever is passed. + h2. Examples
diff --git a/fastimage.gemspec b/fastimage.gemspec
index db75f39..d7f7e0b 100644
--- a/fastimage.gemspec
+++ b/fastimage.gemspec
@@ -1,10 +1,10 @@
Gem::Specification.new do |s|
s.name = %q{fastimage}
- s.version = "1.6.6"
+ s.version = "1.6.7"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Stephen Sykes"]
- s.date = %q{2014-12-05}
+ s.date = %q{2015-02-28}
s.description = %q{FastImage finds the size or type of an image given its uri by fetching as little as needed.}
s.email = %q{sdsykes@gmail.com}
s.extra_rdoc_files = [
diff --git a/lib/fastimage.rb b/lib/fastimage.rb
index 9d540b6..15e0cf6 100644
--- a/lib/fastimage.rb
+++ b/lib/fastimage.rb
@@ -11,7 +11,7 @@
# FastImage knows about GIF, JPEG, BMP, TIFF, ICO, CUR, PNG, PSD and WEBP files.
#
# FastImage can also read files from the local filesystem by supplying the path instead of a uri.
-# In this case FastImage uses the Addressable library to read the file in chunks of 256 bytes until
+# In this case FastImage reads the file in chunks of 256 bytes until
# it has enough. This is possibly a useful bandwidth-saving feature if the file is on a network
# attached disk rather than truly local.
#
@@ -168,12 +168,12 @@ class FastImage
begin
@parsed_uri = Addressable::URI.parse(uri)
rescue Addressable::URI::InvalidURIError
- fetch_using_open_uri
+ fetch_using_file_open
else
if @parsed_uri.scheme == "http" || @parsed_uri.scheme == "https"
fetch_using_http
else
- fetch_using_open_uri
+ fetch_using_file_open
end
end
end
@@ -304,8 +304,8 @@ class FastImage
parse_packets FiberStream.new(read_fiber)
end
- def fetch_using_open_uri
- open(@uri) do |s|
+ def fetch_using_file_open
+ File.open(@uri) do |s|
fetch_using_read(s)
end
end
diff --git a/test/test.rb b/test/test.rb
index 66f2fdf..b1d1ac9 100644
--- a/test/test.rb
+++ b/test/test.rb
@@ -279,4 +279,15 @@ class FastImageTest < Test::Unit::TestCase
FastImage.size(url, :raise_on_failure => true)
end
end
+
+ def test_cant_access_shell
+ url = "|echo>shell_test"
+ %x{rm -f shell_test}
+ FastImage.size(url)
+ assert_raises(Errno::ENOENT) do
+ File.open("shell_test")
+ end
+ ensure
+ %x{rm -f shell_test}
+ end
end