@@ -561,25 +561,17 @@ parse_save_field(ReaderObj *self)
561
561
static int
562
562
parse_grow_buff (ReaderObj * self )
563
563
{
564
- if (self -> field_size == 0 ) {
565
- self -> field_size = 4096 ;
566
- if (self -> field != NULL )
567
- PyMem_Free (self -> field );
568
- self -> field = PyMem_New (Py_UCS4 , self -> field_size );
569
- }
570
- else {
571
- Py_UCS4 * field = self -> field ;
572
- if (self -> field_size > PY_SSIZE_T_MAX / 2 ) {
573
- PyErr_NoMemory ();
574
- return 0 ;
575
- }
576
- self -> field_size *= 2 ;
577
- self -> field = PyMem_Resize (field , Py_UCS4 , self -> field_size );
578
- }
579
- if (self -> field == NULL ) {
564
+ assert ((size_t )self -> field_size <= PY_SSIZE_T_MAX / sizeof (Py_UCS4 ));
565
+
566
+ Py_ssize_t field_size_new = self -> field_size ? 2 * self -> field_size : 4096 ;
567
+ Py_UCS4 * field_new = self -> field ;
568
+ PyMem_Resize (field_new , Py_UCS4 , field_size_new );
569
+ if (field_new == NULL ) {
580
570
PyErr_NoMemory ();
581
571
return 0 ;
582
572
}
573
+ self -> field = field_new ;
574
+ self -> field_size = field_size_new ;
583
575
return 1 ;
584
576
}
585
577
@@ -1095,31 +1087,18 @@ join_append_data(WriterObj *self, unsigned int field_kind, void *field_data,
1095
1087
static int
1096
1088
join_check_rec_size (WriterObj * self , Py_ssize_t rec_len )
1097
1089
{
1098
-
1099
- if (rec_len < 0 || rec_len > PY_SSIZE_T_MAX - MEM_INCR ) {
1100
- PyErr_NoMemory ();
1101
- return 0 ;
1102
- }
1090
+ assert (rec_len >= 0 );
1103
1091
1104
1092
if (rec_len > self -> rec_size ) {
1105
- if (self -> rec_size == 0 ) {
1106
- self -> rec_size = (rec_len / MEM_INCR + 1 ) * MEM_INCR ;
1107
- if (self -> rec != NULL )
1108
- PyMem_Free (self -> rec );
1109
- self -> rec = PyMem_New (Py_UCS4 , self -> rec_size );
1110
- }
1111
- else {
1112
- Py_UCS4 * old_rec = self -> rec ;
1113
-
1114
- self -> rec_size = (rec_len / MEM_INCR + 1 ) * MEM_INCR ;
1115
- self -> rec = PyMem_Resize (old_rec , Py_UCS4 , self -> rec_size );
1116
- if (self -> rec == NULL )
1117
- PyMem_Free (old_rec );
1118
- }
1119
- if (self -> rec == NULL ) {
1093
+ size_t rec_size_new = (size_t )(rec_len / MEM_INCR + 1 ) * MEM_INCR ;
1094
+ Py_UCS4 * rec_new = self -> rec ;
1095
+ PyMem_Resize (rec_new , Py_UCS4 , rec_size_new );
1096
+ if (rec_new == NULL ) {
1120
1097
PyErr_NoMemory ();
1121
1098
return 0 ;
1122
1099
}
1100
+ self -> rec = rec_new ;
1101
+ self -> rec_size = (Py_ssize_t )rec_size_new ;
1123
1102
}
1124
1103
return 1 ;
1125
1104
}
0 commit comments