Skip to content

gh-161388: [tkinter] Fix crash on raising __str__ method passed to setvar - #161397

Open
sobolevn wants to merge 4 commits into
python:mainfrom
sobolevn:issue-161388
Open

sobolevn wants to merge 4 commits into
python:mainfrom
sobolevn:issue-161388

Conversation

@sobolevn

@sobolevn sobolevn commented Nov 5, 2026 •

Copy link
Copy Markdown
Member

Comment thread Modules/_tkinter.c Resolved
Comment thread Modules/_tkinter.c Resolved
Comment thread Modules/_tkinter.c Resolved
Comment thread Modules/_tkinter.c Resolved
@sobolevn
sobolevn enabled auto-merge (squash) November 5, 2026 19:55
@sobolevn sobolevn added needs backport to 3.14 bugs and security fixes needs backport to 3.15 bugs and security fixes labels Nov 5, 2026
Comment thread Lib/test/test_tcl.py Resolved
@serhiy-storchaka

Copy link
Copy Markdown
Member

The fix LGTM, I have comments for tests and NEWS.

@sobolevn
sobolevn disabled auto-merge November 5, 2026 20:08
Comment thread Lib/test/test_tcl.py
setvar("name1", "name2", default)

self.assertRaises(TclError, getvar, "name1")
self.assertIsNone(setvar("name1", "name2"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I meant setvar("name1", default).

BTW, I would rename default to value.

Comment thread Lib/test/test_tcl.py
with self.assertRaisesRegex(RuntimeError, "setvar evil"):
setvar("name1", "name2", default)

self.assertRaises(TclError, getvar, "name1")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should pass "name1", "name2" if you want to check the value of $name1(name2).

Comment thread Lib/test/test_tcl.py

default = StrRaises()

for getvar, setvar, unsetvar in [

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would not the following be easier to read?

for prefix in '', 'global':
    with self.subTest(...):
        getvar = getattr(self.interp.tk.getvar, prefix + 'getvar')
        ...

Or simply repeat these few lines like in other tests (with shortcut tk = self.interp.tk).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants