mirror of https://github.com/python/cpython
gh-111089: Add PyUnicode_AsUTF8() to the limited C API (#111121)
Add PyUnicode_AsUTF8() function to the limited C API. multiprocessing posixshmem now uses PyUnicode_AsUTF8() instead of PyUnicode_AsUTF8AndSize(): the extension is built with the limited C API. The function now raises an exception if the filename contains an embedded null character instead of truncating silently the filename.
This commit is contained in:
parent
264f4af506
commit
d8f32be5b6
|
@ -726,6 +726,7 @@ function,PyUnicode_AsUCS4,3.7,,
|
|||
function,PyUnicode_AsUCS4Copy,3.7,,
|
||||
function,PyUnicode_AsUTF16String,3.2,,
|
||||
function,PyUnicode_AsUTF32String,3.2,,
|
||||
function,PyUnicode_AsUTF8,3.13,,
|
||||
function,PyUnicode_AsUTF8AndSize,3.10,,
|
||||
function,PyUnicode_AsUTF8String,3.2,,
|
||||
function,PyUnicode_AsUnicodeEscapeString,3.2,,
|
||||
|
|
|
@ -1069,6 +1069,9 @@ New Features
|
|||
limited C API.
|
||||
(Contributed by Victor Stinner in :gh:`85283`.)
|
||||
|
||||
* Add :c:func:`PyUnicode_AsUTF8` function to the limited C API.
|
||||
(Contributed by Victor Stinner in :gh:`111089`.)
|
||||
|
||||
|
||||
Porting to Python 3.13
|
||||
----------------------
|
||||
|
|
|
@ -440,19 +440,6 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromKindAndData(
|
|||
const void *buffer,
|
||||
Py_ssize_t size);
|
||||
|
||||
/* --- Manage the default encoding ---------------------------------------- */
|
||||
|
||||
// Returns a pointer to the default encoding (UTF-8) of the
|
||||
// Unicode object unicode.
|
||||
//
|
||||
// Raise an exception if the string contains embedded null characters.
|
||||
// Use PyUnicode_AsUTF8AndSize() to accept embedded null characters.
|
||||
//
|
||||
// This function caches the UTF-8 encoded string in the Unicode object
|
||||
// and subsequent calls will return the same string. The memory is released
|
||||
// when the Unicode object is deallocated.
|
||||
PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode);
|
||||
|
||||
|
||||
/* === Characters Type APIs =============================================== */
|
||||
|
||||
|
|
|
@ -443,7 +443,17 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
// Returns a pointer to the default encoding (UTF-8) of the
|
||||
// Returns a pointer to the UTF-8 encoding of the Unicode object unicode.
|
||||
//
|
||||
// Raise an exception if the string contains embedded null characters.
|
||||
// Use PyUnicode_AsUTF8AndSize() to accept embedded null characters.
|
||||
//
|
||||
// This function caches the UTF-8 encoded string in the Unicode object
|
||||
// and subsequent calls will return the same string. The memory is released
|
||||
// when the Unicode object is deallocated.
|
||||
PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode);
|
||||
|
||||
// Returns a pointer to the UTF-8 encoding of the
|
||||
// Unicode object unicode and the size of the encoded representation
|
||||
// in bytes stored in `*size` (if size is not NULL).
|
||||
//
|
||||
|
|
|
@ -745,6 +745,7 @@ SYMBOL_NAMES = (
|
|||
"PyUnicode_AsUCS4Copy",
|
||||
"PyUnicode_AsUTF16String",
|
||||
"PyUnicode_AsUTF32String",
|
||||
"PyUnicode_AsUTF8",
|
||||
"PyUnicode_AsUTF8AndSize",
|
||||
"PyUnicode_AsUTF8String",
|
||||
"PyUnicode_AsUnicodeEscapeString",
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Add :c:func:`PyUnicode_AsUTF8` function to the limited C API. Patch by
|
||||
Victor Stinner.
|
|
@ -2478,3 +2478,5 @@
|
|||
added = '3.13'
|
||||
[function.PySys_AuditTuple]
|
||||
added = '3.13'
|
||||
[function.PyUnicode_AsUTF8]
|
||||
added = '3.13'
|
||||
|
|
|
@ -44,7 +44,7 @@ _posixshmem_shm_open_impl(PyObject *module, PyObject *path, int flags,
|
|||
{
|
||||
int fd;
|
||||
int async_err = 0;
|
||||
const char *name = PyUnicode_AsUTF8AndSize(path, NULL);
|
||||
const char *name = PyUnicode_AsUTF8(path);
|
||||
if (name == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ _posixshmem_shm_unlink_impl(PyObject *module, PyObject *path)
|
|||
{
|
||||
int rv;
|
||||
int async_err = 0;
|
||||
const char *name = PyUnicode_AsUTF8AndSize(path, NULL);
|
||||
const char *name = PyUnicode_AsUTF8(path);
|
||||
if (name == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -661,6 +661,7 @@ EXPORT_FUNC(PyUnicode_AsUCS4Copy)
|
|||
EXPORT_FUNC(PyUnicode_AsUnicodeEscapeString)
|
||||
EXPORT_FUNC(PyUnicode_AsUTF16String)
|
||||
EXPORT_FUNC(PyUnicode_AsUTF32String)
|
||||
EXPORT_FUNC(PyUnicode_AsUTF8)
|
||||
EXPORT_FUNC(PyUnicode_AsUTF8AndSize)
|
||||
EXPORT_FUNC(PyUnicode_AsUTF8String)
|
||||
EXPORT_FUNC(PyUnicode_AsWideChar)
|
||||
|
|
Loading…
Reference in New Issue