@@ -565,24 +565,23 @@ parse_save_field(ReaderObj *self)
565
565
static int
566
566
parse_grow_buff (ReaderObj * self )
567
567
{
568
- if (self -> field_size == 0 ) {
569
- self -> field_size = 4096 ;
570
- if (self -> field != NULL )
571
- PyMem_Free (self -> field );
572
- self -> field = PyMem_Malloc (self -> field_size );
573
- }
574
- else {
575
- if (self -> field_size > INT_MAX / 2 ) {
576
- PyErr_NoMemory ();
577
- return 0 ;
578
- }
579
- self -> field_size *= 2 ;
580
- self -> field = PyMem_Realloc (self -> field , self -> field_size );
568
+ unsigned field_size_new ;
569
+ char * field_new ;
570
+
571
+ assert ((unsigned )self -> field_size <= INT_MAX );
572
+
573
+ field_size_new = self -> field_size ? 2 * (unsigned )self -> field_size : 4096 ;
574
+ if (field_size_new > INT_MAX ) {
575
+ PyErr_NoMemory ();
576
+ return 0 ;
581
577
}
582
- if (self -> field == NULL ) {
578
+ field_new = (char * )PyMem_Realloc (self -> field , field_size_new );
579
+ if (field_new == NULL ) {
583
580
PyErr_NoMemory ();
584
581
return 0 ;
585
582
}
583
+ self -> field = field_new ;
584
+ self -> field_size = (int )field_size_new ;
586
585
return 1 ;
587
586
}
588
587
@@ -1088,31 +1087,24 @@ join_append_data(WriterObj *self, char *field, int quote_empty,
1088
1087
static int
1089
1088
join_check_rec_size (WriterObj * self , int rec_len )
1090
1089
{
1090
+ unsigned rec_size_new ;
1091
+ char * rec_new ;
1091
1092
1092
- if (rec_len < 0 || rec_len > INT_MAX - MEM_INCR ) {
1093
- PyErr_NoMemory ();
1094
- return 0 ;
1095
- }
1093
+ assert (rec_len >= 0 );
1096
1094
1097
1095
if (rec_len > self -> rec_size ) {
1098
- if (self -> rec_size == 0 ) {
1099
- self -> rec_size = (rec_len / MEM_INCR + 1 ) * MEM_INCR ;
1100
- if (self -> rec != NULL )
1101
- PyMem_Free (self -> rec );
1102
- self -> rec = PyMem_Malloc (self -> rec_size );
1103
- }
1104
- else {
1105
- char * old_rec = self -> rec ;
1106
-
1107
- self -> rec_size = (rec_len / MEM_INCR + 1 ) * MEM_INCR ;
1108
- self -> rec = PyMem_Realloc (self -> rec , self -> rec_size );
1109
- if (self -> rec == NULL )
1110
- PyMem_Free (old_rec );
1096
+ rec_size_new = (unsigned )(rec_len / MEM_INCR + 1 ) * MEM_INCR ;
1097
+ if (rec_size_new > INT_MAX ) {
1098
+ PyErr_NoMemory ();
1099
+ return 0 ;
1111
1100
}
1112
- if (self -> rec == NULL ) {
1101
+ rec_new = (char * )PyMem_Realloc (self -> rec , rec_size_new );
1102
+ if (rec_new == NULL ) {
1113
1103
PyErr_NoMemory ();
1114
1104
return 0 ;
1115
1105
}
1106
+ self -> rec = rec_new ;
1107
+ self -> rec_size = (int )rec_size_new ;
1116
1108
}
1117
1109
return 1 ;
1118
1110
}
0 commit comments