manoj 99/11/03 23:26:22
Modified: src/lib/apr/file_io/unix dir.c
src/lib/apr/locks/unix locks.c
src/lib/apr/misc/unix start.c
src/lib/apr/threadproc/unix proc.c
Log:
Fix memory leaks in the Unix portions of APR.
Revision Changes Path
1.15 +1 -1 apache-2.0/src/lib/apr/file_io/unix/dir.c
Index: dir.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/dir.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -u -r1.14 -r1.15
--- dir.c 1999/10/31 16:18:36 1.14
+++ dir.c 1999/11/04 07:26:20 1.15
@@ -86,7 +86,7 @@
(*new) = (struct dir_t *)ap_palloc(cont, sizeof(struct dir_t));
(*new)->cntxt = cont;
- (*new)->dirname = strdup(dirname);
+ (*new)->dirname = ap_pstrdup(cont, dirname);
(*new)->dirstruct = opendir(dirname);
(*new)->entry = ap_pcalloc(cont, sizeof(struct dirent));
1.12 +2 -2 apache-2.0/src/lib/apr/locks/unix/locks.c
Index: locks.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/locks/unix/locks.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -u -r1.11 -r1.12
--- locks.c 1999/10/21 14:31:20 1.11
+++ locks.c 1999/11/04 07:26:20 1.12
@@ -88,10 +88,10 @@
new->cntxt = cont;
new->type = type;
if (fname != NULL) {
- new->fname = strdup(fname);
+ new->fname = ap_pstrdup(cont, fname);
}
else {
- new->fname = strdup(tempnam(NULL, NULL));
+ new->fname = ap_pstrdup(cont, tempnam(NULL, NULL));
unlink(new->fname);
}
1.12 +2 -7 apache-2.0/src/lib/apr/misc/unix/start.c
Index: start.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/unix/start.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -u -r1.11 -r1.12
--- start.c 1999/10/13 09:31:36 1.11
+++ start.c 1999/11/04 07:26:21 1.12
@@ -92,12 +92,7 @@
return APR_ENOPOOL;
}
- if (cont) {
- new = (struct context_t *)ap_palloc(cont, sizeof(struct context_t));
- }
- else {
- new = (struct context_t *)malloc(sizeof(struct context_t));
- }
+ new = (struct context_t *)ap_palloc(cont, sizeof(struct context_t));
new->pool = pool;
new->prog_data = NULL;
@@ -150,7 +145,7 @@
if (dptr == NULL) {
dptr = ap_palloc(cont, sizeof(datastruct));
dptr->next = dptr->prev = NULL;
- dptr->key = strdup(key);
+ dptr->key = ap_pstrdup(cont, key);
if (dptr2) {
dptr2->next = dptr;
dptr->prev = dptr2;
1.10 +8 -6 apache-2.0/src/lib/apr/threadproc/unix/proc.c
Index: proc.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/threadproc/unix/proc.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -u -r1.9 -r1.10
--- proc.c 1999/11/03 07:29:06 1.9
+++ proc.c 1999/11/04 07:26:22 1.10
@@ -305,7 +305,8 @@
struct procattr_t *attr, ap_context_t *cont)
{
int i;
- char **newargs;
+ typedef const char *my_stupid_string;
+ my_stupid_string *newargs;
struct proc_t *pgrp;
(*new) = (struct proc_t *)ap_palloc(cont, sizeof(struct proc_t));
@@ -352,19 +353,20 @@
while (args[i]) {
i++;
}
- newargs = (char **)ap_palloc(cont, sizeof (char *) * (i + 3));
- newargs[0] = strdup(SHELL_PATH);
- newargs[1] = strdup("-c");
+ newargs =
+ (my_stupid_string *) ap_palloc(cont, sizeof (char *) * (i +
3));
+ newargs[0] = SHELL_PATH;
+ newargs[1] = "-c";
i = 0;
while (args[i]) {
- newargs[i + 2] = strdup(args[i]);
+ newargs[i + 2] = args[i];
i++;
}
newargs[i + 3] = NULL;
if (attr->detached) {
ap_detach(&pgrp, attr->cntxt);
}
- execve(SHELL_PATH, newargs, env);
+ execve(SHELL_PATH, (char **) newargs, env);
}
else {
if (attr->detached) {