New submission from Guilherme Polo <ggp...@gmail.com>:

Right now PythonCmd is using the Tcl interpreter stored in self->interp,
but this is unsafe and since it is a Tcl_CmdProc it already receives the
Tcl interpreter as a parameter. Using the interpreter in self->interp is
unsafe because Python might deallocate this TkappObject and then
PythonCmd could be invoked later, and using the interpreter given to the
Tcl_CmdProc is guaranteed to be safe by Tcl.

To reproduce this I needed a debug build and also needed to run the
example below in the interpreter:

>>> import tkFileDialog
>>> tkFileDialog.askdirectory() # here I both windows, then:
>>> Segmentation fault

There are other ways to reproduce this but I can't remember them
offhand, I know there are other ways because I've hit this same problem
in another python <-> tcl bridge by doing something else.

The patch could be expanded to remove the use of "self" in
PythonCmd_Clientdata, but given another wish I have -- to move to
Tcl_CreateObjCommand -- self would be needed again.

----------
components: Tkinter
files: use_given_interp.diff
keywords: patch
messages: 78613
nosy: gpolo
severity: normal
status: open
title: PythonCmd in Modules/_tkinter.c should use the given "interp" parameter
versions: Python 2.6, Python 2.7, Python 3.0, Python 3.1
Added file: http://bugs.python.org/file12505/use_given_interp.diff

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue4792>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to