diff --git a/swift/common/swob.py b/swift/common/swob.py index 50df593ac6..275db486d1 100644 --- a/swift/common/swob.py +++ b/swift/common/swob.py @@ -485,8 +485,10 @@ class Range(object): else: start = None if end: - # when end contains non numeric value, this also causes - # ValueError + # We could just rely on int() raising the ValueError, but + # this catches things like '--0' + if not end.isdigit(): + raise ValueError('Invalid Range header: %s' % headerval) end = int(end) if end < 0: raise ValueError('Invalid Range header: %s' % headerval) diff --git a/test/unit/common/test_swob.py b/test/unit/common/test_swob.py index 0a8a224bbf..c0993d5d1e 100644 --- a/test/unit/common/test_swob.py +++ b/test/unit/common/test_swob.py @@ -250,6 +250,7 @@ class TestRange(unittest.TestCase): """ _assert_invalid_range(None) + _assert_invalid_range('nonbytes=0-') _assert_invalid_range('nonbytes=foobar,10-2') _assert_invalid_range('bytes=5-3') _assert_invalid_range('bytes=-') @@ -260,6 +261,7 @@ class TestRange(unittest.TestCase): _assert_invalid_range('bytes=nonumber-5') _assert_invalid_range('bytes=nonumber') _assert_invalid_range('bytes=--1') + _assert_invalid_range('bytes=--0') class TestMatch(unittest.TestCase):