
This issue trackerhas been migrated toGitHub, and is currentlyread-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.
Created on2015-03-30 19:56 byserhiy.storchaka, last changed2022-04-11 14:58 byadmin. This issue is nowclosed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| tp_new_workaround.patch | serhiy.storchaka,2016-05-07 21:23 | review | ||
| Messages (11) | |||
|---|---|---|---|
| msg239636 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2015-03-30 19:56 | |
In 2.7 and 3.3:>>> import _tkinter>>> _tkinter.Tcl_Obj()Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: cannot create '_tkinter.Tcl_Obj' instances>>> _tkinter.TkttType()Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: cannot create 'tktimertoken' instancesIn 3.4+:>>> import _tkinter>>> _tkinter.Tcl_Obj()Segmentation fault (core dumped)And the same for _tkinter.TkttType.Looks as this is a result ofissue15721. | |||
| msg240034 -(view) | Author: Terry J. Reedy (terry.reedy)*![]() | Date: 2015-04-03 20:26 | |
With 3.4.3, I get the equivalent on Windows (a 'python has stopped working' box). | |||
| msg240275 -(view) | Author: Amaury Forgeot d'Arc (amaury.forgeotdarc)*![]() | Date: 2015-04-08 15:36 | |
Probably a PyType_Ready() missing. | |||
| msg242678 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2015-05-06 14:56 | |
PyType_Ready() is called inside PyType_FromSpec(). | |||
| msg254681 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2015-11-15 08:28 | |
Beforeissue15721 the tp_new was NULL, and this prevented from creating instances. Afterissue15721 the tp_new is inherited from object. An instance is created, but all internal pointers are NULLs. Following repr() dereferences NULL. | |||
| msg265094 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2016-05-07 21:23 | |
There is special exception -- tp_new is not inherited for static types whose base class is 'object' (see a comment in inherit_special() inObjects/typeobject.c#4569 for explanation). After converting them to heap types they became inherit tp_new from object.Proposed patch adds workarounds for types in _tkinter and curses.panel modules. | |||
| msg265096 -(view) | Author: Terry J. Reedy (terry.reedy)*![]() | Date: 2016-05-07 22:42 | |
The news part of the patch did not apply -- best not to include such in posted patches.After recompiliing 3.5 on Windows 10, the two tkinter test cases give the 3.3 TypeErrors instead of crashing. test_tcl also runs. curses does not run on Windows.I do not know enough internals to really understand#15721 or why you call the fix a workaround, but I do understand 'exception' (OK) versus 'crash' (forbidden). Unless you think restoring the previous situation (tp_new = NUll) can cause a worse problem, I would apply this soon, within a week, so not forgotten before the June update releases. The tcl test addition is correct. The fix can be improved later if you think of something better.I initially wondered why _tkinter has classes that cannot be instantiated (from Python). Then I discovered that this is normal, and that the exception is standard.>>> type(iter([]))()Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: cannot create 'list_iterator' instancesIs list_iterator.tp_new NULL? Or does it raise instead of crash by other means? | |||
| msg265102 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2016-05-07 23:02 | |
I called the fix a workaround because other solution may be to make PyType_FromSpec() not setting tp_new in such cases. I expect that this is common mistake when convert a static class to a heap class with PyType_FromSpec(). At least we should add warnings in C API documentation andPEP 384. Or change the behavior of PyType_FromSpec() if it is appropriate. But this is different issue. If PyType_FromSpec() will be changed, proposed fix can be reverted. | |||
| msg265106 -(view) | Author: Terry J. Reedy (terry.reedy)*![]() | Date: 2016-05-08 00:12 | |
I noticed that you reported the crash and asked for a fix or reversion on#15721 6 months ago, with no response. Hence, lets not wait longer.Looking again, I see that there were 3 rounds of patches in 2012/2013. If you want to follow up, I suggest closing that issue and open a fresh issue with with alternatives and your recommendation. | |||
| msg265150 -(view) | Author: Roundup Robot (python-dev)![]() | Date: 2016-05-08 17:47 | |
New changesetcd25508c62fc by Serhiy Storchaka in branch '3.5':Issue#23815: Fixed crashes related to directly created instances of types inhttps://hg.python.org/cpython/rev/cd25508c62fcNew changeset1c6326e81c33 by Serhiy Storchaka in branch 'default':Issue#23815: Fixed crashes related to directly created instances of types inhttps://hg.python.org/cpython/rev/1c6326e81c33 | |||
| msg265153 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2016-05-08 18:29 | |
After looking closer I found that making PyType_FromSpec() not inheriting tp_new for static types whose base class is 'object' is not an option, because this breaks examples in the documentation, and likely break some third-party code. Opened newissue26979 for documenting the catch.Thank you for your review Terry. | |||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:58:14 | admin | set | github: 68003 |
| 2016-05-08 18:29:33 | serhiy.storchaka | set | status: open -> closed resolution: fixed messages: +msg265153 stage: patch review -> resolved |
| 2016-05-08 17:47:18 | python-dev | set | nosy: +python-dev messages: +msg265150 |
| 2016-05-08 00:12:51 | terry.reedy | set | messages: +msg265106 |
| 2016-05-07 23:02:44 | serhiy.storchaka | set | messages: +msg265102 |
| 2016-05-07 22:42:11 | terry.reedy | set | messages: +msg265096 |
| 2016-05-07 21:23:38 | serhiy.storchaka | set | files: +tp_new_workaround.patch versions: - Python 3.4 messages: +msg265094 assignee:serhiy.storchaka keywords: +patch stage: patch review |
| 2015-11-15 08:28:13 | serhiy.storchaka | set | messages: +msg254681 versions: + Python 3.6 |
| 2015-05-06 14:56:16 | serhiy.storchaka | set | messages: +msg242678 |
| 2015-04-08 15:36:52 | amaury.forgeotdarc | set | messages: +msg240275 |
| 2015-04-03 20:26:47 | terry.reedy | set | nosy: +terry.reedy messages: +msg240034 |
| 2015-03-30 19:56:54 | serhiy.storchaka | create | |