summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2003-08-30 14:43:55 +0000
committerRaymond Hettinger <python@rcn.com>2003-08-30 14:43:55 +0000
commitc11dbcd4bfb6c366e9ce541b982a036b34f7c30c (patch)
tree1ff7b900d7de13d81b1c46b0ba8c3c882184d679
parent62297132215490e9cb406e1a21f03aff40d421cb (diff)
downloadcpython-git-c11dbcd4bfb6c366e9ce541b982a036b34f7c30c.tar.gz
SF bug 797650: Infinite loop in textwrap.py
When the indents were set to longer than the width and long word breaking was enabled, an infinite loop would result because the inner loop did not assure that at least one character was stripped off on every pass.
-rw-r--r--Lib/test/test_textwrap.py10
-rw-r--r--Lib/textwrap.py2
2 files changed, 11 insertions, 1 deletions
diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py
index 904c79091d..a0111680b4 100644
--- a/Lib/test/test_textwrap.py
+++ b/Lib/test/test_textwrap.py
@@ -305,6 +305,16 @@ How *do* you spell that odd word, anyways?
['Did you say "supercalifragilisticexpialidocious?"',
'How *do* you spell that odd word, anyways?'])
+ # SF bug 797650. Prevent an infinite loop by making sure that at
+ # least one character gets split off on every pass.
+ self.check_wrap('-'*10+'hello', 10,
+ ['----------',
+ ' h',
+ ' e',
+ ' l',
+ ' l',
+ ' o'],
+ subsequent_indent = ' '*15)
def test_nobreak_long(self):
# Test with break_long_words disabled
diff --git a/Lib/textwrap.py b/Lib/textwrap.py
index a4a549848f..f371fbbe5a 100644
--- a/Lib/textwrap.py
+++ b/Lib/textwrap.py
@@ -168,7 +168,7 @@ class TextWrapper:
Handle a chunk of text (most likely a word, not whitespace) that
is too long to fit in any line.
"""
- space_left = width - cur_len
+ space_left = max(width - cur_len, 1)
# If we're allowed to break long words, then do so: put as much
# of the next chunk onto the current line as will fit.