diff options
author | Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> | 2022-11-09 16:53:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-09 16:53:21 (GMT) |
commit | 6e3cc72afeaee2532b4327776501eb8234ac787b (patch) | |
tree | a951ff89cfdec4cc449dd92a7e36372abd103f78 | |
parent | c03e05c2e72f3ea5e797389e7d1042eef85ad37a (diff) | |
download | cpython-6e3cc72afeaee2532b4327776501eb8234ac787b.zip cpython-6e3cc72afeaee2532b4327776501eb8234ac787b.tar.gz cpython-6e3cc72afeaee2532b4327776501eb8234ac787b.tar.bz2 |
GH-90699: disallow `_Py_IDENTIFIER` in core code (GH-99210)
-rw-r--r-- | Include/cpython/object.h | 4 | ||||
-rw-r--r-- | Programs/_testembed.c | 10 |
2 files changed, 10 insertions, 4 deletions
diff --git a/Include/cpython/object.h b/Include/cpython/object.h index d07cb3b..f4755a7 100644 --- a/Include/cpython/object.h +++ b/Include/cpython/object.h @@ -41,7 +41,7 @@ typedef struct _Py_Identifier { Py_ssize_t index; } _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 // 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_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname) -#endif /* NEEDS_PY_IDENTIFIER */ +#endif /* !Py_BUILD_CORE */ typedef struct { /* Number implementations must check *both* diff --git a/Programs/_testembed.c b/Programs/_testembed.c index adb4483..a6ce3f7 100644 --- a/Programs/_testembed.c +++ b/Programs/_testembed.c @@ -1,7 +1,6 @@ #ifndef Py_BUILD_CORE_MODULE # define Py_BUILD_CORE_MODULE #endif -#define NEEDS_PY_IDENTIFIER /* Always enable assertion (even in release mode) */ #undef NDEBUG @@ -1891,7 +1890,14 @@ static int test_unicode_id_init(void) { // bpo-42882: Test that _PyUnicode_FromId() works // 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 _testembed_Py_InitializeFromConfig(); |