Check for Illegal characters in file name #1423

This commit is contained in:
Karel Pičman 2023-01-25 13:46:45 +01:00
parent 8168ecf8f1
commit 0bc77ca3a7
4 changed files with 20 additions and 8 deletions

View File

@ -115,10 +115,10 @@ class DmsfFilesController < ApplicationController
if params[:dmsf_file_revision] if params[:dmsf_file_revision]
unless @file.locked_for_user? unless @file.locked_for_user?
revision = DmsfFileRevision.new revision = DmsfFileRevision.new
revision.title = params[:dmsf_file_revision][:title] revision.title = params[:dmsf_file_revision][:title].scrub.strip
revision.name = params[:dmsf_file_revision][:name] revision.name = params[:dmsf_file_revision][:name].scrub.strip
revision.description = params[:dmsf_file_revision][:description] revision.description = params[:dmsf_file_revision][:description].scrub.strip
revision.comment = params[:dmsf_file_revision][:comment] revision.comment = params[:dmsf_file_revision][:comment].scrub.strip
revision.dmsf_file = @file revision.dmsf_file = @file
last_revision = @file.last_revision last_revision = @file.last_revision
revision.source_revision = last_revision revision.source_revision = last_revision
@ -191,7 +191,11 @@ class DmsfFilesController < ApplicationController
rescue => e rescue => e
Rails.logger.error "Could not send email notifications: #{e.message}" Rails.logger.error "Could not send email notifications: #{e.message}"
end end
else
ok = false
end end
else
ok = false
end end
end end
end end

View File

@ -112,7 +112,7 @@ class DmsfLinksController < ApplicationController
params[:dmsf_link][:target_folder_id]) ? params[:dmsf_link][:target_folder_id].to_i : nil params[:dmsf_link][:target_folder_id]) ? params[:dmsf_link][:target_folder_id].to_i : nil
@dmsf_link.target_type = DmsfFolder.model_name.to_s @dmsf_link.target_type = DmsfFolder.model_name.to_s
end end
@dmsf_link.name = params[:dmsf_link][:name] @dmsf_link.name = params[:dmsf_link][:name].scrub.strip
result = @dmsf_link.save result = @dmsf_link.save
if result if result
flash[:notice] = l(:notice_successful_create) flash[:notice] = l(:notice_successful_create)

View File

@ -490,8 +490,8 @@ class DmsfFolder < ActiveRecord::Base
def update_from_params(params) def update_from_params(params)
# Attributes # Attributes
self.title = params[:dmsf_folder][:title].strip self.title = params[:dmsf_folder][:title].scrub.strip
self.description = params[:dmsf_folder][:description].strip self.description = params[:dmsf_folder][:description].scrub.strip
self.dmsf_folder_id = params[:parent_id].present? ? params[:parent_id] : params[:dmsf_folder][:dmsf_folder_id] self.dmsf_folder_id = params[:parent_id].present? ? params[:parent_id] : params[:dmsf_folder][:dmsf_folder_id]
self.system = params[:dmsf_folder][:system].present? self.system = params[:dmsf_folder][:system].present?
# Custom fields # Custom fields
@ -530,7 +530,7 @@ class DmsfFolder < ActiveRecord::Base
# 1. Invalid characters are replaced with dots. # 1. Invalid characters are replaced with dots.
# 2. Two or more dots in a row are replaced with a single dot. # 2. Two or more dots in a row are replaced with a single dot.
# 3. Windows' WebClient does not like a dot at the end. # 3. Windows' WebClient does not like a dot at the end.
title.gsub(/[#{INVALID_CHARACTERS}]/, '.').gsub(/\.{2,}/, '.').chomp('.') title.scrub.gsub(/[#{INVALID_CHARACTERS}]/, '.').gsub(/\.{2,}/, '.').chomp('.')
end end
def permission_for_role(role) def permission_for_role(role)

View File

@ -263,4 +263,12 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
assert @folder1.watched_by?(@jsmith) assert @folder1.watched_by?(@jsmith)
end end
def test_update_from_params_with_invalid_string_sequence
invalid_string_sequence = "Invalid sequence\x81"
params = { dmsf_folder: { title: invalid_string_sequence, description: invalid_string_sequence } }
assert @folder1.update_from_params(params)
assert_equal invalid_string_sequence.scrub, @folder1.title
assert_equal invalid_string_sequence.scrub, @folder1.description
end
end end