Skip to content

Commit dc79819

Browse files
committed
gh-156939: Do no modify writer->size directly in UCS1 encoder
unicode_encode_ucs1() now calls PyBytesWriter_Grow() to update the PyBytesWriter size.
1 parent 1084787 commit dc79819

1 file changed

Lines changed: 9 additions & 6 deletions

File tree

Objects/unicodeobject.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,8 @@ backslashreplace(PyBytesWriter *writer, char *str,
796796
}
797797
size += incr;
798798
}
799+
/* subtract preallocated bytes */
800+
size -= (collend - collstart);
799801

800802
str = PyBytesWriter_GrowAndUpdatePointer(writer, size, str);
801803
if (str == NULL) {
@@ -871,6 +873,8 @@ xmlcharrefreplace(PyBytesWriter *writer, char *str,
871873
}
872874
size += incr;
873875
}
876+
/* subtract preallocated bytes */
877+
size -= (collend - collstart);
874878

875879
str = PyBytesWriter_GrowAndUpdatePointer(writer, size, str);
876880
if (str == NULL) {
@@ -7262,8 +7266,6 @@ unicode_encode_ucs1(PyObject *unicode,
72627266
break;
72637267

72647268
case _Py_ERROR_BACKSLASHREPLACE:
7265-
/* subtract preallocated bytes */
7266-
writer->size -= (collend - collstart);
72677269
str = backslashreplace(writer, str,
72687270
unicode, collstart, collend);
72697271
if (str == NULL)
@@ -7272,8 +7274,6 @@ unicode_encode_ucs1(PyObject *unicode,
72727274
break;
72737275

72747276
case _Py_ERROR_XMLCHARREFREPLACE:
7275-
/* subtract preallocated bytes */
7276-
writer->size -= (collend - collstart);
72777277
str = xmlcharrefreplace(writer, str,
72787278
unicode, collstart, collend);
72797279
if (str == NULL)
@@ -7314,10 +7314,13 @@ unicode_encode_ucs1(PyObject *unicode,
73147314
}
73157315
}
73167316
else {
7317-
/* subtract preallocated bytes */
7318-
writer->size -= newpos - collstart;
73197317
/* Only overallocate the buffer if it's not the last write */
73207318
writer->overallocate = (newpos < size);
7319+
7320+
/* subtract preallocated bytes */
7321+
if (PyBytesWriter_Grow(writer, -(newpos - collstart)) < 0) {
7322+
goto onError;
7323+
}
73217324
}
73227325

73237326
const char *rep_str;

0 commit comments

Comments
 (0)