aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2012-03-15 05:44:46 -0700
committerJosé Valim <jose.valim@gmail.com>2012-03-15 05:44:46 -0700
commitee8e567d50f75c91d422c697845bc1a84f9114be (patch)
tree847447d1262067ee8392d96bdbfe9ed8b9baa50f
parentfbc9d0f44f090a9873834f4966760c3e80682559 (diff)
parent4073505065a0937d67c45860988fbe634a700c37 (diff)
downloadrails-ee8e567d50f75c91d422c697845bc1a84f9114be.tar.gz
rails-ee8e567d50f75c91d422c697845bc1a84f9114be.tar.bz2
rails-ee8e567d50f75c91d422c697845bc1a84f9114be.zip
Merge pull request #5448 from JonRowe/patch_file_update_on_master
Commas in directory names causes hang in ActiveSupport::FileUpdateChecker
-rw-r--r--activesupport/lib/active_support/file_update_checker.rb6
-rw-r--r--activesupport/test/file_update_checker_test.rb15
2 files changed, 20 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/file_update_checker.rb b/activesupport/lib/active_support/file_update_checker.rb
index 2ede084e95..3ff249536e 100644
--- a/activesupport/lib/active_support/file_update_checker.rb
+++ b/activesupport/lib/active_support/file_update_checker.rb
@@ -106,11 +106,15 @@ module ActiveSupport
globs = []
hash.each do |key, value|
- globs << "#{key}/**/*#{compile_ext(value)}"
+ globs << "#{escape(key)}/**/*#{compile_ext(value)}"
end
"{#{globs.join(",")}}"
end
+ def escape(key)
+ key.gsub(',','\,')
+ end
+
def compile_ext(array) #:nodoc:
array = Array(array)
return if array.empty?
diff --git a/activesupport/test/file_update_checker_test.rb b/activesupport/test/file_update_checker_test.rb
index dd2483287b..c884068c59 100644
--- a/activesupport/test/file_update_checker_test.rb
+++ b/activesupport/test/file_update_checker_test.rb
@@ -1,5 +1,6 @@
require 'abstract_unit'
require 'fileutils'
+require 'thread'
MTIME_FIXTURES_PATH = File.expand_path("../fixtures", __FILE__)
@@ -79,4 +80,18 @@ class FileUpdateCheckerWithEnumerableTest < ActiveSupport::TestCase
assert !checker.execute_if_updated
assert_equal 0, i
end
+
+ def test_should_not_block_if_a_strange_filename_used
+ FileUtils.mkdir_p("tmp_watcher/valid,yetstrange,path,")
+ FileUtils.touch(FILES.map { |file_name| "tmp_watcher/valid,yetstrange,path,/#{file_name}" } )
+
+ test = Thread.new do
+ checker = ActiveSupport::FileUpdateChecker.new([],"tmp_watcher/valid,yetstrange,path," => :txt){ i += 1 }
+ Thread.exit
+ end
+ test.priority = -1
+ test.join(5)
+
+ assert !test.alive?
+ end
end