This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2021年09月28日 20:45 by seberg, last changed 2022年04月11日 14:59 by admin. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 29103 | merged | petr.viktorin, 2021年10月20日 16:37 | |
| Messages (6) | |||
|---|---|---|---|
| msg402804 - (view) | Author: Sebastian Berg (seberg) * | Date: 2021年09月28日 20:45 | |
As noted in the issue: https://bugs.python.org/issue15870#msg402800 `PyType_FromSpec` assumes that the `name` passed is persistent for the program lifetime. This seems wrong/unnecessary: We are creating a heap-type, a heap-type's name is stored as a unicode object anyway! So, there is no reason to require the string be persistent, and a program that decides to build a custom name dynamically (for whatever reasons) would run into a crash when the name is accessed. The code: https://github.com/python/cpython/blob/0c50b8c0b8274d54d6b71ed7bd21057d3642f138/Objects/typeobject.c#L3427 Should be modified to point to to the `ht_name` (utf8) data instead. My guess is, the simplest solution is calling `type_set_name`, even if that runs some unnecessary checks. I understand that the FromSpec API is mostly designed to replace the static type definition rather than extend it, but it seems an unintentional/strange requirement. |
|||
| msg403347 - (view) | Author: Hai Shi (shihai1991) * (Python triager) | Date: 2021年10月07日 03:06 | |
> the simplest solution is calling `type_set_name`, even if that runs some unnecessary checks. Hm, I haven't find any case who use dynamical tp_name of Type_Spec temporarily. If we meet this user case, Adding a new object pointer of type name in is an other option maybe:) |
|||
| msg403734 - (view) | Author: Petr Viktorin (petr.viktorin) * (Python committer) | Date: 2021年10月12日 13:49 | |
> Hm, I haven't find any case who use dynamical tp_name of Type_Spec temporarily. The use case is creating types entirely on demand, with dynamically created specs. This is useful e.g. for wrapping objects of a different object system, like C++ classes or Qt/GTK widgets. But this issue is not about adding new API to enable a new use case. The *current* API can reasonably be used with a dynamic name string. So we shouldn't wait until someone tells us they need this fixed :) So this should either be fixed or the requirement should be documented. (And the documentation would IMO sound like we're acknowledging a design bug, so it's better to fix.) |
|||
| msg404493 - (view) | Author: Petr Viktorin (petr.viktorin) * (Python committer) | Date: 2021年10月20日 16:35 | |
> the simplest solution is calling `type_set_name`, even if that runs some unnecessary checks. Unfortunately this won't work, because it sets ht_name to the same value as tp_name. For historical reasons, the two can be different (and often are) for types created with PyType_From*Spec*. I haven't found a way to fix this issue without adding yet another pointer to the PyHeapTypeObject struct. |
|||
| msg404577 - (view) | Author: Petr Viktorin (petr.viktorin) * (Python committer) | Date: 2021年10月21日 09:46 | |
New changeset 8a310dd5f4242b5d28013c1905c6573477e3b957 by Petr Viktorin in branch 'main': bpo-45315: PyType_FromSpec: Copy spec->name and have the type own the memory for its name (GH-29103) https://github.com/python/cpython/commit/8a310dd5f4242b5d28013c1905c6573477e3b957 |
|||
| msg404578 - (view) | Author: Petr Viktorin (petr.viktorin) * (Python committer) | Date: 2021年10月21日 10:04 | |
Since the fix changes the size of PyObject, it can't be backported. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:59:50 | admin | set | github: 89478 |
| 2021年12月04日 16:45:18 | ronaldoussoren | link | issue45983 superseder |
| 2021年10月21日 10:04:47 | petr.viktorin | set | status: open -> closed resolution: fixed messages: + msg404578 stage: patch review -> resolved |
| 2021年10月21日 09:46:30 | petr.viktorin | set | messages: + msg404577 |
| 2021年10月20日 16:37:57 | petr.viktorin | set | keywords:
+ patch stage: patch review pull_requests: + pull_request27371 |
| 2021年10月20日 16:35:05 | petr.viktorin | set | messages: + msg404493 |
| 2021年10月12日 13:49:36 | petr.viktorin | set | messages: + msg403734 |
| 2021年10月07日 03:06:19 | shihai1991 | set | nosy:
+ petr.viktorin, shihai1991 messages: + msg403347 |
| 2021年09月28日 20:45:06 | seberg | create | |