Commit b3208976 authored by Arturo Herrero's avatar Arturo Herrero

Fix 500 errors entering a webhook URL not encoded

parent 473cf7c5
...@@ -54,7 +54,9 @@ class WebHookService ...@@ -54,7 +54,9 @@ class WebHookService
http_status: response.code, http_status: response.code,
message: response.to_s message: response.to_s
} }
rescue SocketError, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Net::OpenTimeout, Net::ReadTimeout, Gitlab::HTTP::BlockedUrlError, Gitlab::HTTP::RedirectionTooDeep, Gitlab::Json::LimitedEncoder::LimitExceeded => e rescue SocketError, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED, Errno::EHOSTUNREACH,
Net::OpenTimeout, Net::ReadTimeout, Gitlab::HTTP::BlockedUrlError, Gitlab::HTTP::RedirectionTooDeep,
Gitlab::Json::LimitedEncoder::LimitExceeded, URI::InvalidURIError => e
execution_duration = Gitlab::Metrics::System.monotonic_time - start_time execution_duration = Gitlab::Metrics::System.monotonic_time - start_time
log_execution( log_execution(
trigger: hook_name, trigger: hook_name,
......
...@@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w ...@@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Webhooks # Webhooks
Project webhooks allow you to trigger a URL if for example new code is pushed or Project webhooks allow you to trigger a URL-encoded if for example new code is pushed or
a new issue is created. You can configure webhooks to listen for specific events a new issue is created. You can configure webhooks to listen for specific events
like pushes, issues or merge requests. GitLab sends a POST request with data like pushes, issues or merge requests. GitLab sends a POST request with data
to the webhook URL. to the webhook URL.
......
...@@ -131,6 +131,15 @@ RSpec.describe WebHookService do ...@@ -131,6 +131,15 @@ RSpec.describe WebHookService do
end end
end end
context 'when url is not encoded' do
let(:project_hook) { create(:project_hook, url: 'http://server.com/my path/') }
it 'handles exceptions' do
expect(service_instance.execute).to eq(status: :error, message: 'bad URI(is not URI?): "http://server.com/my path/"')
expect { service_instance.execute }.not_to raise_error
end
end
context 'when request body size is too big' do context 'when request body size is too big' do
it 'does not perform the request' do it 'does not perform the request' do
stub_const("#{described_class}::REQUEST_BODY_SIZE_LIMIT", 10.bytes) stub_const("#{described_class}::REQUEST_BODY_SIZE_LIMIT", 10.bytes)
......
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