Issue #15242: Have PyImport_GetMagicTag() return a const char *

defined in sysmodule.c instead of straight out of a Unicode object.

Thanks to Amaury Forgeot d'Arc for noticing the bug and Eric Snow for
writing the patch.
This commit is contained in:
Brett Cannon 2012-07-09 14:22:12 -04:00
parent 903c27c177
commit 3adc7b75a5
3 changed files with 24 additions and 29 deletions

View file

@ -1478,6 +1478,22 @@ make_version_info(void)
return version_info;
}
/* sys.implementation values */
#define NAME "cpython"
const char *_PySys_ImplName = NAME;
#define QUOTE(arg) #arg
#define STRIFY(name) QUOTE(name)
#define MAJOR STRIFY(PY_MAJOR_VERSION)
#define MINOR STRIFY(PY_MINOR_VERSION)
#define TAG NAME "-" MAJOR MINOR;
const char *_PySys_ImplCacheTag = TAG;
#undef NAME
#undef QUOTE
#undef STRIFY
#undef MAJOR
#undef MINOR
#undef TAG
static PyObject *
make_impl_info(PyObject *version_info)
{
@ -1490,13 +1506,7 @@ make_impl_info(PyObject *version_info)
/* populate the dict */
#define NAME "cpython"
#define QUOTE(arg) #arg
#define STRIFY(name) QUOTE(name)
#define MAJOR STRIFY(PY_MAJOR_VERSION)
#define MINOR STRIFY(PY_MINOR_VERSION)
#define TAG NAME "-" MAJOR MINOR
value = PyUnicode_FromString(NAME);
value = PyUnicode_FromString(_PySys_ImplName);
if (value == NULL)
goto error;
res = PyDict_SetItemString(impl_info, "name", value);
@ -1504,19 +1514,13 @@ make_impl_info(PyObject *version_info)
if (res < 0)
goto error;
value = PyUnicode_FromString(TAG);
value = PyUnicode_FromString(_PySys_ImplCacheTag);
if (value == NULL)
goto error;
res = PyDict_SetItemString(impl_info, "cache_tag", value);
Py_DECREF(value);
if (res < 0)
goto error;
#undef NAME
#undef QUOTE
#undef STRIFY
#undef MAJOR
#undef MINOR
#undef TAG
res = PyDict_SetItemString(impl_info, "version", version_info);
if (res < 0)