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.
|
||||
(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
|
||||
-------
|
||||
|
||||
|
|
|
@ -725,7 +725,9 @@ class UnicodeTest(string_tests.CommonTest,
|
|||
import _testcapi
|
||||
u = '𝖀𝖓𝖎𝖈𝖔𝖉𝖊'
|
||||
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):
|
||||
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 *
|
||||
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);
|
||||
}
|
||||
|
||||
if (size < 0) {
|
||||
PyErr_BadInternalCall();
|
||||
|
@ -2266,10 +2274,19 @@ PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)
|
|||
"Negative size passed to PyUnicode_FromStringAndSize");
|
||||
return NULL;
|
||||
}
|
||||
if (u != NULL)
|
||||
if (u != 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);
|
||||
}
|
||||
}
|
||||
|
||||
PyObject *
|
||||
|
|
Loading…
Reference in New Issue