[Python-checkins] bpo-36346: Raise DeprecationWarning when creating legacy Unicode (GH-20933)

Inada Naoki webhook-mailer at python.org
Tue Jun 30 02:27:04 EDT 2020


https://github.com/python/cpython/commit/038dd0f79dc89566b01ba66a5a018266b2917a19
commit: 038dd0f79dc89566b01ba66a5a018266b2917a19
branch: master
author: Inada Naoki <songofacandy at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020年06月30日T15:26:56+09:00
summary:
bpo-36346: Raise DeprecationWarning when creating legacy Unicode (GH-20933)
files:
A Misc/NEWS.d/next/C API/2020-06-17-20-31-12.bpo-36346.mwIyxi.rst
M Doc/whatsnew/3.10.rst
M Lib/test/test_unicode.py
M Objects/unicodeobject.c
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 0674ce8cff177..a3b53ba48e9b7 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -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
 -------
 
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 6e397161fd98d..59697935fe5cd 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -725,7 +725,9 @@ def test_isidentifier_legacy(self):
 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())
diff --git a/Misc/NEWS.d/next/C API/2020-06-17-20-31-12.bpo-36346.mwIyxi.rst b/Misc/NEWS.d/next/C API/2020-06-17-20-31-12.bpo-36346.mwIyxi.rst
new file mode 100644
index 0000000000000..9b0400399beb9
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-06-17-20-31-12.bpo-36346.mwIyxi.rst	
@@ -0,0 +1,2 @@
+Raises DeprecationWarning for ``PyUnicode_FromUnicode(NULL, size)`` and
+``PyUnicode_FromStringAndSize(NULL, size)`` with ``size > 0``.
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index db3f55e02b98b..fe46de2ae4743 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -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 *


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /