]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-141968: Use take_bytes in encodings.punycode (#141974)
authorCody Maloney <cmaloney@users.noreply.github.com>
Fri, 28 Nov 2025 17:47:14 +0000 (09:47 -0800)
committerGitHub <noreply@github.com>
Fri, 28 Nov 2025 17:47:14 +0000 (17:47 +0000)
Removes a copy going from bytearray to bytes.

Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Lib/encodings/punycode.py
Misc/NEWS.d/next/Library/2025-11-25-23-29-08.gh-issue-141968.0JnjXf.rst [new file with mode: 0644]

index 4622fc8c9206f375b2fe7024fc215219d880c591..268fccbd53974e53cd7af6763376f0761b9665ef 100644 (file)
@@ -17,7 +17,7 @@ def segregate(str):
         else:
             extended.add(c)
     extended = sorted(extended)
-    return bytes(base), extended
+    return base.take_bytes(), extended
 
 def selective_len(str, max):
     """Return the length of str, considering only characters below max."""
@@ -83,7 +83,7 @@ def generate_generalized_integer(N, bias):
         t = T(j, bias)
         if N < t:
             result.append(digits[N])
-            return bytes(result)
+            return result.take_bytes()
         result.append(digits[t + ((N - t) % (36 - t))])
         N = (N - t) // (36 - t)
         j += 1
@@ -112,7 +112,7 @@ def generate_integers(baselen, deltas):
         s = generate_generalized_integer(delta, bias)
         result.extend(s)
         bias = adapt(delta, points==0, baselen+points+1)
-    return bytes(result)
+    return result.take_bytes()
 
 def punycode_encode(text):
     base, extended = segregate(text)
diff --git a/Misc/NEWS.d/next/Library/2025-11-25-23-29-08.gh-issue-141968.0JnjXf.rst b/Misc/NEWS.d/next/Library/2025-11-25-23-29-08.gh-issue-141968.0JnjXf.rst
new file mode 100644 (file)
index 0000000..0cefeed
--- /dev/null
@@ -0,0 +1,2 @@
+Remove data copy from :mod:`codecs` ``punycode`` encoding by using
+:meth:`bytearray.take_bytes`.