[issue13051] Infinite recursion in curses.textpad.Textbox

2011-09-27 Thread Tycho Andersen

New submission from Tycho Andersen :

The attached patch fixes two bugs which manifest as infinite recursion in 
_insert_printable_char() of Textbox. First, the previous implementation of 
_insert_printable_char() used recursion to move characters when inserting a 
character. Thus, any Textpad which had an area greater than the interpreter's 
maximum recursion limit would crash. A minimal test case is the following:

#!/usr/bin/python
import curses
from curses.textpad import Textbox

def main(stdscr):
box = Textbox(stdscr, insert_mode=True)
box.stripspaces = True
while 1:
cmd = box.edit()
if cmd == 'q':
break

curses.wrapper(main)

Run that script in a terminal with area (i.e. $LINES * $COLUMNS) > 1000 (the 
default max recursion limit), press any key and be greeted by a stack trace. 
The patch changes the implementation of _insert_printable_char() to be 
iterative, thus avoiding the infinite recursion.

Second, when the underlying curses window was resized to be smaller than it was 
when the Textpad was created, pressing any key would result in infinite 
recursion (or with the new method, an infinite loop). The patch also changes 
Textpad so that instead of keeping the underlying window's size as instance 
attributes of this Textpad, Textpad asks the underlying window its size every 
time Textpad needs to know, allowing the underlying window to be resized at 
will.

I've verified this bug is in 2.7.1 and 3.2. Let me know if you need anything 
else.

--
components: Library (Lib)
files: textpad_resize.patch
keywords: patch
messages: 144559
nosy: tycho
priority: normal
severity: normal
status: open
title: Infinite recursion in curses.textpad.Textbox
type: crash
versions: Python 2.7, Python 3.2
Added file: http://bugs.python.org/file23249/textpad_resize.patch

___
Python tracker 
<http://bugs.python.org/issue13051>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue13051] Infinite recursion in curses.textpad.Textbox

2011-12-20 Thread Tycho Andersen

Tycho Andersen  added the comment:

Attached is a patch which contains a testcase as well. A few notes about this 
testcase:

1. I couldn't figure out how to get it to run correctly after all the other 
tests had run, so I had to run it first. This seems lame. One possible fix is 
to run each testcase in curses.wrapper; I'd be happy to change this patch to do 
that if it's more acceptable.

2. This testcase only tests one of the two bugs this patch fixes. The other 
seems much harder to write a testcase for, since you have to have a terminal 
such that curses.LINES * curses.COLUMS > sys.getrecursionlimit(). If there's a 
good way to guarantee this, I'd be happy to write a testcase for it.

Comments are appreciated!

--
Added file: http://bugs.python.org/file24061/textpad-recursion-fix.patch

___
Python tracker 
<http://bugs.python.org/issue13051>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue13051] Infinite recursion in curses.textpad.Textbox

2012-01-25 Thread Tycho Andersen

Tycho Andersen  added the comment:

Hi, any movement on this?

--

___
Python tracker 
<http://bugs.python.org/issue13051>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com