Skip to content

Commit b7aa1d7

Browse files
committed
Fixed #726 issue where split_port was checking len(None)
- Fixed #726 by adding a check for None in split_port - Also switched to using a _raise_invalid_port() function to replace multiple slightly differing ValueErrors for invalid port
1 parent a6064e3 commit b7aa1d7

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

docker/utils/ports/ports.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

2-
32
def add_port_mapping(port_bindings, internal_port, external):
43
if internal_port in port_bindings:
54
port_bindings[internal_port].append(external)
@@ -33,9 +32,8 @@ def to_port_range(port):
3332
if "/" in port:
3433
parts = port.split("/")
3534
if len(parts) != 2:
36-
raise ValueError('Invalid port "%s", should be '
37-
'[[remote_ip:]remote_port[-remote_port]:]'
38-
'port[/protocol]' % port)
35+
_raise_invalid_port(port)
36+
3937
port, protocol = parts
4038
protocol = "/" + protocol
4139

@@ -52,11 +50,17 @@ def to_port_range(port):
5250
'port or startport-endport' % port)
5351

5452

53+
def _raise_invalid_port(port):
54+
raise ValueError('Invalid port "%s", should be '
55+
'[[remote_ip:]remote_port[-remote_port]:]'
56+
'port[/protocol]' % port)
57+
58+
5559
def split_port(port):
5660
parts = str(port).split(':')
61+
5762
if not 1 <= len(parts) <= 3:
58-
raise ValueError('Invalid port "%s", should be '
59-
'[[remote_ip:]remote_port:]port[/protocol]' % port)
63+
_raise_invalid_port(port)
6064

6165
if len(parts) == 1:
6266
internal_port, = parts
@@ -66,6 +70,10 @@ def split_port(port):
6670

6771
internal_range = to_port_range(internal_port)
6872
external_range = to_port_range(external_port)
73+
74+
if internal_range is None or external_range is None:
75+
_raise_invalid_port(port)
76+
6977
if len(internal_range) != len(external_range):
7078
raise ValueError('Port ranges don\'t match in length')
7179

tests/utils_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,14 @@ def test_port_and_range_invalid(self):
419419
self.assertRaises(ValueError,
420420
lambda: split_port("0.0.0.0:1000:2000-2002/tcp"))
421421

422+
def test_port_only_with_colon(self):
423+
self.assertRaises(ValueError,
424+
lambda: split_port(":80"))
425+
426+
def test_host_only_with_colon(self):
427+
self.assertRaises(ValueError,
428+
lambda: split_port("localhost:"))
429+
422430
def test_build_port_bindings_with_one_port(self):
423431
port_bindings = build_port_bindings(["127.0.0.1:1000:1000"])
424432
self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])

0 commit comments

Comments
 (0)