From eba20084f68fffda28dffad083371ce9c0a27890 Mon Sep 17 00:00:00 2001 From: Lei Gong Date: Thu, 9 Mar 2017 15:40:22 +0800 Subject: [PATCH] fix: Missing exception handling in split_port when no container port "localhost:host_port:" case will raise TypeError exception directly Catch the "TypeError" and give proper error message * docker/utils/ports.py Signed-off-by: Lei Gong --- docker/utils/ports.py | 5 +++++ tests/unit/utils_test.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/docker/utils/ports.py b/docker/utils/ports.py index 5bb7079a..e2aeb8cc 100644 --- a/docker/utils/ports.py +++ b/docker/utils/ports.py @@ -85,8 +85,13 @@ def split_port(port): return internal_range, external_range external_ip, external_port, internal_port = parts + + if not internal_port: + _raise_invalid_port(port) + internal_range = to_port_range(internal_port) external_range = to_port_range(external_port, len(internal_range) == 1) + if not external_range: external_range = [None] * len(internal_range) diff --git a/tests/unit/utils_test.py b/tests/unit/utils_test.py index ad6d9e09..ed84b3a1 100644 --- a/tests/unit/utils_test.py +++ b/tests/unit/utils_test.py @@ -574,6 +574,10 @@ class PortsTest(unittest.TestCase): self.assertRaises(ValueError, lambda: split_port("localhost:")) + def test_with_no_container_port(self): + self.assertRaises(ValueError, + lambda: split_port("localhost:80:")) + def test_build_port_bindings_with_one_port(self): port_bindings = build_port_bindings(["127.0.0.1:1000:1000"]) self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])