From 06627ef2caa6854540b50b6f6309c7d12ccfb56a Mon Sep 17 00:00:00 2001
From: Dheerendra Rathor <dheeru.rathor14@gmail.com>
Date: Fri, 30 Oct 2015 03:19:10 +0530
Subject: [PATCH] Fixed #25635 -- Made URLValidator allow '+' in scheme.

---
 django/core/validators.py | 2 +-
 tests/validators/tests.py | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/django/core/validators.py b/django/core/validators.py
index 69cc76ffab..15b16bcd2f 100644
--- a/django/core/validators.py
+++ b/django/core/validators.py
@@ -89,7 +89,7 @@ class URLValidator(RegexValidator):
     host_re = '(' + hostname_re + domain_re + tld_re + '|localhost)'
 
     regex = _lazy_re_compile(
-        r'^(?:[a-z0-9\.\-]*)://'  # scheme is validated separately
+        r'^(?:[a-z0-9\.\-\+]*)://'  # scheme is validated separately
         r'(?:\S+(?::\S*)?@)?'  # user:pass authentication
         r'(?:' + ipv4_re + '|' + ipv6_re + '|' + host_re + ')'
         r'(?::\d{2,5})?'  # port
diff --git a/tests/validators/tests.py b/tests/validators/tests.py
index f696f8e573..ad82eb6132 100644
--- a/tests/validators/tests.py
+++ b/tests/validators/tests.py
@@ -22,7 +22,7 @@ from django.test.utils import str_prefix
 from django.utils._os import upath
 
 NOW = datetime.now()
-EXTENDED_SCHEMES = ['http', 'https', 'ftp', 'ftps', 'git', 'file']
+EXTENDED_SCHEMES = ['http', 'https', 'ftp', 'ftps', 'git', 'file', 'git+ssh']
 
 TEST_DATA = [
     # (validator, value, expected),
@@ -205,6 +205,7 @@ TEST_DATA = [
 
     (URLValidator(EXTENDED_SCHEMES), 'file://localhost/path', None),
     (URLValidator(EXTENDED_SCHEMES), 'git://example.com/', None),
+    (URLValidator(EXTENDED_SCHEMES), 'git+ssh://git@github.com/example/hg-git.git', None),
 
     (URLValidator(EXTENDED_SCHEMES), 'git://-invalid.com', ValidationError),
     # Trailing newlines not accepted