dgaudet 99/04/20 10:03:28
Modified: src CHANGES src/main http_core.c Log: fix memory leak exacerbated by certain configurations PR: 4225 Revision Changes Path 1.1309 +3 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1308 retrieving revision 1.1309 diff -u -r1.1308 -r1.1309 --- CHANGES 1999/04/20 15:44:08 1.1308 +++ CHANGES 1999/04/20 17:03:25 1.1309 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) Fix a memory leak which is exacerbated by certain configurations. + [Dean Gaudet] PR#4225 + *) Prevent clobbering saved IFS values in APACI. [Jim Jagielski] *) Fix buffer overflows in ap_uuencode and ap_uudecode pointed out 1.259 +7 -12 apache-1.3/src/main/http_core.c Index: http_core.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.258 retrieving revision 1.259 diff -u -r1.258 -r1.259 --- http_core.c 1999/04/09 12:57:07 1.258 +++ http_core.c 1999/04/20 17:03:27 1.259 @@ -407,18 +407,16 @@ int nelts; void **elts; int i; + pool *tmp; - /* XXX: we are about to waste some ram ... we will build a new array - * and we need some scratch space to do it. The old array and the - * scratch space are never freed. - */ sconf = ap_get_module_config(s->module_config, &core_module); sec = sconf->sec; nelts = sec->nelts; elts = (void **)sec->elts; - /* build our sorting space */ - sortbin = ap_palloc(p, sec->nelts * sizeof(*sortbin)); + /* we have to allocate tmp space to do a stable sort */ + tmp = ap_make_sub_pool(p); + sortbin = ap_palloc(tmp, sec->nelts * sizeof(*sortbin)); for (i = 0; i < nelts; ++i) { sortbin[i].orig_index = i; sortbin[i].elt = elts[i]; @@ -426,15 +424,12 @@ qsort(sortbin, nelts, sizeof(*sortbin), reorder_sorter); - /* and now build a new array */ - /* XXX: uh I don't see why we can't reuse the old array, what - * was I thinking? -djg */ - sec = ap_make_array(p, nelts, sizeof(void *)); + /* and now copy back to the original array */ for (i = 0; i < nelts; ++i) { - *(void **)ap_push_array(sec) = sortbin[i].elt; + elts[i] = sortbin[i].elt; } - sconf->sec = sec; + ap_destroy_pool(tmp); } /*****************************************************************