summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>2022-11-09 16:53:21 (GMT)
committerGitHub <noreply@github.com>2022-11-09 16:53:21 (GMT)
commit6e3cc72afeaee2532b4327776501eb8234ac787b (patch)
treea951ff89cfdec4cc449dd92a7e36372abd103f78
parentc03e05c2e72f3ea5e797389e7d1042eef85ad37a (diff)
downloadcpython-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.h4
-rw-r--r--Programs/_testembed.c10
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();