Commit 3f3b202c authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Improve files API. Relative path check added. Create dir for new file if missing

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent a1d88f0f
......@@ -17,6 +17,13 @@ module Gitlab
# update the file in the satellite's working dir
file_path_in_satellite = File.join(repo.working_dir, file_path)
# Prevent relative links
unless safe_path?(file_path_in_satellite)
Gitlab::GitLogger.error("FileAction: Relative path not allowed")
return false
end
File.delete(file_path_in_satellite)
# add removed file
......
......@@ -19,6 +19,13 @@ module Gitlab
# update the file in the satellite's working dir
file_path_in_satellite = File.join(repo.working_dir, file_path)
# Prevent relative links
unless safe_path?(file_path_in_satellite)
Gitlab::GitLogger.error("FileAction: Relative path not allowed")
return false
end
File.open(file_path_in_satellite, 'w') { |f| f.write(content) }
# commit the changes
......
......@@ -8,6 +8,10 @@ module Gitlab
@file_path = file_path
@ref = ref
end
def safe_path?(path)
File.absolute_path(path) == path
end
end
end
end
......@@ -16,15 +16,19 @@ module Gitlab
# create target branch in satellite at the corresponding commit from bare repo
repo.git.checkout({raise: true, timeout: true, b: true}, ref, "origin/#{ref}")
# update the file in the satellite's working dir
file_path_in_satellite = File.join(repo.working_dir, file_path)
dir_name_in_satellite = File.dirname(file_path_in_satellite)
# Prevent relative links
unless File.absolute_path(file_path_in_satellite) == file_path_in_satellite
Gitlab::GitLogger.error("NewFileAction: Relative path not allowed")
unless safe_path?(file_path_in_satellite)
Gitlab::GitLogger.error("FileAction: Relative path not allowed")
return false
end
# Create dir if not exists
FileUtils.mkdir_p(dir_name_in_satellite)
# Write file
File.open(file_path_in_satellite, 'w') { |f| f.write(content) }
# add new file
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment