From: Raymond Hettinger Date: Sat, 30 Aug 2003 14:52:35 +0000 (+0000) Subject: SF bug 797650: Infinite loop in textwrap.py X-Git-Tag: v2.3.1~120 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=48ced318cd01e332c1bde56b3575d531d61046cc;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py index 904c79091dd7..a0111680b429 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 a4a549848f3d..f371fbbe5ac7 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. diff --git a/Misc/NEWS b/Misc/NEWS index 2af1ef9e501f..b682c27af227 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -33,6 +33,9 @@ Extension modules Library ------- +- Bug #797650: textwrap.py now avoids an infinite loop when one of the + indent arguments is set longer than the total width. + - Bug #796149: time.strptime() now handles having parentheses in the format string properly.