Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
6648bf56
Commit
6648bf56
authored
Dec 03, 2015
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #25709: Fixed problem with in-place string concatenation and utf-8 cache.
parents
38982e54
7aa69086
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
0 deletions
+24
-0
Lib/test/test_unicode.py
Lib/test/test_unicode.py
+17
-0
Misc/NEWS
Misc/NEWS
+2
-0
Objects/unicodeobject.c
Objects/unicodeobject.c
+5
-0
No files found.
Lib/test/test_unicode.py
View file @
6648bf56
...
...
@@ -2702,6 +2702,23 @@ class UnicodeTest(string_tests.CommonTest,
self
.
assertTrue
(
astral
>=
bmp2
)
self
.
assertFalse
(
astral
>=
astral2
)
@
support
.
cpython_only
def
test_pep393_utf8_caching_bug
(
self
):
# Issue #25709: Problem with string concatenation and utf-8 cache
from
_testcapi
import
getargs_s_hash
for
k
in
0x24
,
0xa4
,
0x20ac
,
0x1f40d
:
s
=
''
for
i
in
range
(
5
):
# Due to CPython specific optimization the 's' string can be
# resized in-place.
s
+=
chr
(
k
)
# Parsing with the "s#" format code calls indirectly
# PyUnicode_AsUTF8AndSize() which creates the UTF-8
# encoded string cached in the Unicode object.
self
.
assertEqual
(
getargs_s_hash
(
s
),
chr
(
k
).
encode
()
*
(
i
+
1
))
# Check that the second call returns the same result
self
.
assertEqual
(
getargs_s_hash
(
s
),
chr
(
k
).
encode
()
*
(
i
+
1
))
class
StringModuleTest
(
unittest
.
TestCase
):
def
test_formatter_parser
(
self
):
...
...
Misc/NEWS
View file @
6648bf56
...
...
@@ -10,6 +10,8 @@ Release date: XXXX-XX-XX
Core and Builtins
-----------------
- Issue #25709: Fixed problem with in-place string concatenation and utf-8 cache.
- Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside
__getattr__.
...
...
Objects/unicodeobject.c
View file @
6648bf56
...
...
@@ -722,6 +722,11 @@ resize_compact(PyObject *unicode, Py_ssize_t length)
}
new_size
=
(
struct_size
+
(
length
+
1
)
*
char_size
);
if
(
_PyUnicode_HAS_UTF8_MEMORY
(
unicode
))
{
PyObject_DEL
(
_PyUnicode_UTF8
(
unicode
));
_PyUnicode_UTF8
(
unicode
)
=
NULL
;
_PyUnicode_UTF8_LENGTH
(
unicode
)
=
0
;
}
_Py_DEC_REFTOTAL
;
_Py_ForgetReference
(
unicode
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment