bpo-36346: Raise DeprecationWarning when creating legacy Unicode (GH-20933)
This commit is contained in:
parent
349f76c6aa
commit
038dd0f79d
|
@ -213,6 +213,11 @@ Porting to Python 3.10
|
||||||
for historical reason. It is no longer allowed.
|
for historical reason. It is no longer allowed.
|
||||||
(Contributed by Victor Stinner in :issue:`40839`.)
|
(Contributed by Victor Stinner in :issue:`40839`.)
|
||||||
|
|
||||||
|
* ``PyUnicode_FromUnicode(NULL, size)`` and ``PyUnicode_FromStringAndSize(NULL, size)``
|
||||||
|
raise ``DeprecationWarning`` now. Use :c:func:`PyUnicode_New` to allocate
|
||||||
|
Unicode object without initial data.
|
||||||
|
(Contributed by Inada Naoki in :issue:`36346`.)
|
||||||
|
|
||||||
Removed
|
Removed
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
|
@ -725,7 +725,9 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
import _testcapi
|
import _testcapi
|
||||||
u = '𝖀𝖓𝖎𝖈𝖔𝖉𝖊'
|
u = '𝖀𝖓𝖎𝖈𝖔𝖉𝖊'
|
||||||
self.assertTrue(u.isidentifier())
|
self.assertTrue(u.isidentifier())
|
||||||
self.assertTrue(_testcapi.unicode_legacy_string(u).isidentifier())
|
with support.check_warnings():
|
||||||
|
warnings.simplefilter('ignore', DeprecationWarning)
|
||||||
|
self.assertTrue(_testcapi.unicode_legacy_string(u).isidentifier())
|
||||||
|
|
||||||
def test_isprintable(self):
|
def test_isprintable(self):
|
||||||
self.assertTrue("".isprintable())
|
self.assertTrue("".isprintable())
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Raises DeprecationWarning for ``PyUnicode_FromUnicode(NULL, size)`` and
|
||||||
|
``PyUnicode_FromStringAndSize(NULL, size)`` with ``size > 0``.
|
|
@ -2179,8 +2179,16 @@ unicode_char(Py_UCS4 ch)
|
||||||
PyObject *
|
PyObject *
|
||||||
PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
|
PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
if (u == NULL)
|
if (u == NULL) {
|
||||||
|
if (size > 0) {
|
||||||
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||||
|
"PyUnicode_FromUnicode(NULL, size) is deprecated; "
|
||||||
|
"use PyUnicode_New() instead", 1) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
return (PyObject*)_PyUnicode_New(size);
|
return (PyObject*)_PyUnicode_New(size);
|
||||||
|
}
|
||||||
|
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -2266,10 +2274,19 @@ PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)
|
||||||
"Negative size passed to PyUnicode_FromStringAndSize");
|
"Negative size passed to PyUnicode_FromStringAndSize");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (u != NULL)
|
if (u != NULL) {
|
||||||
return PyUnicode_DecodeUTF8Stateful(u, size, NULL, NULL);
|
return PyUnicode_DecodeUTF8Stateful(u, size, NULL, NULL);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
if (size > 0) {
|
||||||
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||||
|
"PyUnicode_FromStringAndSize(NULL, size) is deprecated; "
|
||||||
|
"use PyUnicode_New() instead", 1) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
return (PyObject *)_PyUnicode_New(size);
|
return (PyObject *)_PyUnicode_New(size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
|
Loading…
Reference in New Issue