File tree Expand file tree Collapse file tree 1 file changed +15
-4
lines changed
Expand file tree Collapse file tree 1 file changed +15
-4
lines changed Original file line number Diff line number Diff line change @@ -99,14 +99,25 @@ parserutils_error parserutils_vector_append(parserutils_vector *vector,
9999 slot = vector -> current_item + 1 ;
100100
101101 if ((size_t ) slot >= vector -> items_allocated ) {
102- void * temp = realloc (vector -> items ,
103- (vector -> items_allocated + vector -> chunk_size ) *
104- vector -> item_size );
102+ /* Exponential growth: double current allocation,
103+ but at least add chunk_size */
104+ size_t new_allocated = vector -> items_allocated * 2 ;
105+ void * temp ;
106+
107+ if (new_allocated < vector -> items_allocated + vector -> chunk_size )
108+ new_allocated = vector -> items_allocated + vector -> chunk_size ;
109+
110+ /* Overflow check */
111+ if (new_allocated < vector -> items_allocated ||
112+ new_allocated > SIZE_MAX / vector -> item_size )
113+ return PARSERUTILS_NOMEM ;
114+
115+ temp = realloc (vector -> items , new_allocated * vector -> item_size );
105116 if (temp == NULL )
106117 return PARSERUTILS_NOMEM ;
107118
108119 vector -> items = temp ;
109- vector -> items_allocated += vector -> chunk_size ;
120+ vector -> items_allocated = new_allocated ;
110121 }
111122
112123 memcpy ((uint8_t * ) vector -> items + (slot * vector -> item_size ),
You can’t perform that action at this time.
0 commit comments