Fix slow project reference pattern regex
This commit is contained in:
parent
68d1332229
commit
219d24fe52
4 changed files with 14 additions and 1 deletions
|
@ -530,6 +530,7 @@ class Project < ActiveRecord::Base
|
|||
|
||||
def reference_pattern
|
||||
%r{
|
||||
(?<!#{Gitlab::PathRegex::PATH_START_CHAR})
|
||||
((?<namespace>#{Gitlab::PathRegex::FULL_NAMESPACE_FORMAT_REGEX})\/)?
|
||||
(?<project>#{Gitlab::PathRegex::PROJECT_PATH_FORMAT_REGEX})
|
||||
}x
|
||||
|
|
5
changelogs/unreleased/security-fix-regex-dos.yml
Normal file
5
changelogs/unreleased/security-fix-regex-dos.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix slow regex in project reference pattern
|
||||
merge_request:
|
||||
author:
|
||||
type: security
|
|
@ -125,7 +125,8 @@ module Gitlab
|
|||
# allow non-regex validations, etc), `NAMESPACE_FORMAT_REGEX_JS` serves as a Javascript-compatible version of
|
||||
# `NAMESPACE_FORMAT_REGEX`, with the negative lookbehind assertion removed. This means that the client-side validation
|
||||
# will pass for usernames ending in `.atom` and `.git`, but will be caught by the server-side validation.
|
||||
PATH_REGEX_STR = '[a-zA-Z0-9_\.][a-zA-Z0-9_\-\.]*'.freeze
|
||||
PATH_START_CHAR = '[a-zA-Z0-9_\.]'.freeze
|
||||
PATH_REGEX_STR = PATH_START_CHAR + '[a-zA-Z0-9_\-\.]*'.freeze
|
||||
NAMESPACE_FORMAT_REGEX_JS = PATH_REGEX_STR + '[a-zA-Z0-9_\-]|[a-zA-Z0-9_]'.freeze
|
||||
|
||||
NO_SUFFIX_REGEX = /(?<!\.git|\.atom)/.freeze
|
||||
|
|
|
@ -26,6 +26,12 @@ describe Banzai::Filter::ProjectReferenceFilter do
|
|||
expect(reference_filter(act).to_html).to eq(CGI.escapeHTML(exp))
|
||||
end
|
||||
|
||||
it 'fails fast for long invalid string' do
|
||||
expect do
|
||||
Timeout.timeout(5.seconds) { reference_filter("A" * 50000).to_html }
|
||||
end.not_to raise_error
|
||||
end
|
||||
|
||||
it 'allows references with text after the > character' do
|
||||
doc = reference_filter("Hey #{reference}foo")
|
||||
expect(doc.css('a').first.attr('href')).to eq urls.project_url(subject)
|
||||
|
|
Loading…
Reference in a new issue