@@ -243,6 +243,8 @@ lexbor_mraw_realloc_tail(lexbor_mraw_t *mraw, void *data, void *begin,
243243 size_t size , size_t begin_len , size_t new_size ,
244244 bool * is_valid )
245245{
246+ size_t length ;
247+ uint8_t * tmp ;
246248 lexbor_mem_chunk_t * chunk = mraw -> mem -> chunk ;
247249
248250 if (chunk -> size > (begin_len + new_size )) {
@@ -267,35 +269,26 @@ lexbor_mraw_realloc_tail(lexbor_mraw_t *mraw, void *data, void *begin,
267269 * If the tail is short then we increase the current data.
268270 */
269271 if (begin_len == lexbor_mraw_meta_size ()) {
270- void * new_data ;
271- lexbor_mem_chunk_t new_chunk ;
272-
273- * is_valid = true;
274-
275- lexbor_mem_chunk_init (mraw -> mem , & new_chunk ,
276- new_size + lexbor_mraw_meta_size ());
277- if (new_chunk .data == NULL ) {
278- return NULL ;
279- }
280-
281- lexbor_mraw_meta_set (new_chunk .data , & new_size );
282- new_data = lexbor_mraw_data_begin (new_chunk .data );
283-
284- if (size != 0 ) {
285- memcpy (new_data , data , sizeof (uint8_t ) * size );
286- }
287-
288272#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER )
289273 ASAN_UNPOISON_MEMORY_REGION (chunk -> data , chunk -> size );
290274#endif
275+ * is_valid = true;
291276
292- lexbor_mem_chunk_destroy (mraw -> mem , chunk , false);
277+ length = lexbor_mem_align (new_size + lexbor_mraw_meta_size ()
278+ + mraw -> mem -> chunk_min_size );
293279
294- chunk -> data = new_chunk .data ;
295- chunk -> size = new_chunk .size ;
280+ tmp = lexbor_realloc (chunk -> data , length );
281+ if (tmp == NULL ) {
282+ return NULL ;
283+ }
284+
285+ chunk -> data = tmp ;
286+ chunk -> size = length ;
296287 chunk -> length = new_size + lexbor_mraw_meta_size ();
297288
298- return new_data ;
289+ lexbor_mraw_meta_set (tmp , & new_size );
290+
291+ return lexbor_mraw_data_begin (tmp );
299292 }
300293
301294 * is_valid = false;
0 commit comments