From 68e4424725eaf986fb12f3e3a7d338d3304e6e51 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Wed, 29 Jun 2016 12:58:46 -0700 Subject: [PATCH] Fix for deletion with regexp escape chars --- models/site_file.rb | 5 ++--- tests/site_file_tests.rb | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/models/site_file.rb b/models/site_file.rb index bf81c5e3..7da4be4a 100644 --- a/models/site_file.rb +++ b/models/site_file.rb @@ -9,14 +9,14 @@ class SiteFile < Sequel::Model def before_destroy if is_directory - site.site_files_dataset.where(path: /^#{path}\//, is_directory: true).all.each do |site_file| + site.site_files_dataset.where(path: /^#{Regexp.quote path}\//, is_directory: true).all.each do |site_file| begin site_file.destroy rescue Sequel::NoExistingObject end end - site.site_files_dataset.where(path: /^#{path}\//, is_directory: false).all.each do |site_file| + site.site_files_dataset.where(path: /^#{Regexp.quote path}\//, is_directory: false).all.each do |site_file| site_file.destroy end @@ -50,4 +50,3 @@ class SiteFile < Sequel::Model SiteChangeFile.filter(site_id: site_id, filename: path).delete end end - diff --git a/tests/site_file_tests.rb b/tests/site_file_tests.rb index fbf6ccff..9141dba1 100644 --- a/tests/site_file_tests.rb +++ b/tests/site_file_tests.rb @@ -63,6 +63,12 @@ describe 'site_files' do DeleteCacheOrderWorker.jobs.collect {|j| j['args'].last}.must_equal ['/index.html', '/?surf=1', '/'] end + it 'property deletes directories with regexp special chars in them' do + upload 'dir' => '8)', 'files[]' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') + delete_file filename: '8)' + @site.reload.site_files.select {|f| f.path =~ /#{Regexp.quote '8)'}/}.length.must_equal 0 + end + it 'deletes a directory and all files in it' do upload( 'dir' => 'test',