You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "Roy T. Fielding" <fi...@kiwi.ICS.UCI.EDU> on 1997/03/07 19:29:27 UTC

Re: memory management goof in alloc.c (fwd)

>    if (arr->nelts == arr->nalloc) {
>!     int new_size = arr->nalloc * 2;
>!     char *new_data;
>!     
>!     if (new_size == 0) ++new_size;
>! 
>!     new_data = pcalloc (arr->pool, arr->elt_size * new_size);

In principle the patch is good, but I don't like the way it
sets new_size and then increments it.  That bit of uglyness was
inherited from the other function, but I'd prefer to fix both
as in the following patch.

.....Roy

Index: alloc.c
===================================================================
RCS file: /export/home/cvs/apache/src/alloc.c,v
retrieving revision 1.22
diff -c -r1.22 alloc.c
*** alloc.c	1997/01/19 17:43:27	1.22
--- alloc.c	1997/03/07 18:25:38
***************
*** 461,471 ****
  void *push_array (array_header *arr)
  {
    if (arr->nelts == arr->nalloc) {
!     char *new_data = pcalloc (arr->pool, arr->nalloc * arr->elt_size * 2);
  
      memcpy (new_data, arr->elts, arr->nalloc * arr->elt_size);
      arr->elts = new_data;
!     arr->nalloc *= 2;
    }
  
    ++arr->nelts;
--- 461,474 ----
  void *push_array (array_header *arr)
  {
    if (arr->nelts == arr->nalloc) {
!     int new_size = (arr->nalloc <= 0) ? 1 : arr->nalloc * 2;
!     char *new_data;
!     
!     new_data = pcalloc (arr->pool, arr->elt_size * new_size);
  
      memcpy (new_data, arr->elts, arr->nalloc * arr->elt_size);
      arr->elts = new_data;
!     arr->nalloc = new_size;
    }
  
    ++arr->nelts;
***************
*** 477,487 ****
    int elt_size = dst->elt_size;
    
    if (dst->nelts + src->nelts > dst->nalloc) {
!     int new_size = dst->nalloc * 2;
      char *new_data;
  
-     if (new_size == 0) ++new_size;
-     
      while (dst->nelts + src->nelts > new_size)
        new_size *= 2;
  
--- 480,488 ----
    int elt_size = dst->elt_size;
    
    if (dst->nelts + src->nelts > dst->nalloc) {
!     int new_size = (dst->nalloc <= 0) ? 1 : dst->nalloc * 2;
      char *new_data;
  
      while (dst->nelts + src->nelts > new_size)
        new_size *= 2;