GH-90699: disallow _Py_IDENTIFIER
in core code (GH-99210)
This commit is contained in:
parent
c03e05c2e7
commit
6e3cc72afe
@ -41,7 +41,7 @@ typedef struct _Py_Identifier {
|
|||||||
Py_ssize_t index;
|
Py_ssize_t index;
|
||||||
} _Py_Identifier;
|
} _Py_Identifier;
|
||||||
|
|
||||||
#if defined(NEEDS_PY_IDENTIFIER) || !defined(Py_BUILD_CORE)
|
#ifndef Py_BUILD_CORE
|
||||||
// For now we are keeping _Py_IDENTIFIER for continued use
|
// For now we are keeping _Py_IDENTIFIER for continued use
|
||||||
// in non-builtin extensions (and naughty PyPI modules).
|
// in non-builtin extensions (and naughty PyPI modules).
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ typedef struct _Py_Identifier {
|
|||||||
#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value)
|
#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value)
|
||||||
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
|
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
|
||||||
|
|
||||||
#endif /* NEEDS_PY_IDENTIFIER */
|
#endif /* !Py_BUILD_CORE */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* Number implementations must check *both*
|
/* Number implementations must check *both*
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#ifndef Py_BUILD_CORE_MODULE
|
#ifndef Py_BUILD_CORE_MODULE
|
||||||
# define Py_BUILD_CORE_MODULE
|
# define Py_BUILD_CORE_MODULE
|
||||||
#endif
|
#endif
|
||||||
#define NEEDS_PY_IDENTIFIER
|
|
||||||
|
|
||||||
/* Always enable assertion (even in release mode) */
|
/* Always enable assertion (even in release mode) */
|
||||||
#undef NDEBUG
|
#undef NDEBUG
|
||||||
@ -1891,7 +1890,14 @@ static int test_unicode_id_init(void)
|
|||||||
{
|
{
|
||||||
// bpo-42882: Test that _PyUnicode_FromId() works
|
// bpo-42882: Test that _PyUnicode_FromId() works
|
||||||
// when Python is initialized multiples times.
|
// when Python is initialized multiples times.
|
||||||
_Py_IDENTIFIER(test_unicode_id_init);
|
|
||||||
|
// This is equivalent to `_Py_IDENTIFIER(test_unicode_id_init)`
|
||||||
|
// but since `_Py_IDENTIFIER` is disabled when `Py_BUILD_CORE`
|
||||||
|
// is defined, it is manually expanded here.
|
||||||
|
static _Py_Identifier PyId_test_unicode_id_init = {
|
||||||
|
.string = "test_unicode_id_init",
|
||||||
|
.index = -1,
|
||||||
|
};
|
||||||
|
|
||||||
// Initialize Python once without using the identifier
|
// Initialize Python once without using the identifier
|
||||||
_testembed_Py_InitializeFromConfig();
|
_testembed_Py_InitializeFromConfig();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user