Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2aee6a6

Browse files
Issue #16971: Fix a refleak in the charmap decoder.
2 parents 6de7099 + afb1cb5 commit 2aee6a6

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

Objects/unicodeobject.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7383,27 +7383,35 @@ PyUnicode_DecodeCharmap(const char *s,
73837383
goto onError;
73847384
}
73857385

7386-
if (_PyUnicodeWriter_Prepare(&writer, 1, value) == -1)
7386+
if (_PyUnicodeWriter_Prepare(&writer, 1, value) == -1) {
7387+
Py_DECREF(x);
73877388
goto onError;
7389+
}
73887390
PyUnicode_WRITE(writer.kind, writer.data, writer.pos, value);
73897391
writer.pos++;
73907392
}
73917393
else if (PyUnicode_Check(x)) {
7392-
if (PyUnicode_READY(x) == -1)
7394+
if (PyUnicode_READY(x) == -1) {
7395+
Py_DECREF(x);
73937396
goto onError;
7397+
}
73947398
if (PyUnicode_GET_LENGTH(x) == 1) {
73957399
Py_UCS4 value = PyUnicode_READ_CHAR(x, 0);
73967400
if (value == 0xFFFE)
73977401
goto Undefined;
7398-
if (_PyUnicodeWriter_Prepare(&writer, 1, value) == -1)
7402+
if (_PyUnicodeWriter_Prepare(&writer, 1, value) == -1) {
7403+
Py_DECREF(x);
73997404
goto onError;
7405+
}
74007406
PyUnicode_WRITE(writer.kind, writer.data, writer.pos, value);
74017407
writer.pos++;
74027408
}
74037409
else {
74047410
writer.overallocate = 1;
7405-
if (_PyUnicodeWriter_WriteStr(&writer, x) == -1)
7411+
if (_PyUnicodeWriter_WriteStr(&writer, x) == -1) {
7412+
Py_DECREF(x);
74067413
goto onError;
7414+
}
74077415
}
74087416
}
74097417
else {

0 commit comments

Comments
 (0)