rbb         99/05/24 20:14:20

  Modified:    apr/file_io/unix dir.c fileacc.c filedup.c open.c pipe.c
                        readwrite.c
               apr/misc/unix start.c
               apr/test testfile.c testthread.c
               include  apr_errno.h apr_file_io.h
  Log:
  Tracked down a heap corruption finally.
  
  Revision  Changes    Path
  1.11      +10 -14    apache-apr/apr/file_io/unix/dir.c
  
  Index: dir.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/file_io/unix/dir.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- dir.c     1999/05/24 17:28:15     1.10
  +++ dir.c     1999/05/25 03:14:14     1.11
  @@ -74,21 +74,19 @@
   
   ap_status_t ap_opendir(ap_context_t *cont, const char *dirname, struct dir_t 
**new)
   {
  -    struct dir_t *thedir = (struct dir_t *)ap_palloc(cont->pool, 
sizeof(struct dir_t));
  +    (*new) = (struct dir_t *)ap_palloc(cont->pool, sizeof(struct dir_t));
   
  -    thedir->cntxt = cont;
  -    thedir->dirname = strdup(dirname);
  -    thedir->dirstruct = opendir(dirname);
  -    thedir->entry = NULL;
  -
  -    if (thedir->dirstruct == NULL) {
  -        thedir->dirstruct = NULL;
  -        *new = thedir;
  +    (*new)->cntxt = cont;
  +    (*new)->dirname = strdup(dirname);
  +    (*new)->dirstruct = opendir(dirname);
  +    (*new)->entry = NULL;
  +
  +    if ((*new)->dirstruct == NULL) {
  +        (*new)->dirstruct = NULL;
           return errno;
       }    
       else {
  -        ap_register_cleanup(thedir->cntxt->pool, (void *)thedir, 
dir_cleanup, NULL);
  -        *new = thedir;
  +        ap_register_cleanup((*new)->cntxt->pool, (void *)(*new), 
dir_cleanup, NULL);
           return APR_SUCCESS;
       }
   }
  @@ -217,9 +215,7 @@
   
   ap_status_t ap_get_dir_filename(struct dir_t *thedir, char **new)
   {
  -    char *name = (char *)ap_palloc(thedir->cntxt->pool, 
strlen(thedir->entry->d_name));
  -    name = ap_pstrdup(thedir->cntxt->pool, thedir->entry->d_name);
  -    *new = name;
  +    (*new) = ap_pstrdup(thedir->cntxt->pool, thedir->entry->d_name);
       return APR_SUCCESS;
   }
   
  
  
  
  1.10      +2 -1      apache-apr/apr/file_io/unix/fileacc.c
  
  Index: fileacc.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/file_io/unix/fileacc.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- fileacc.c 1999/05/24 17:28:15     1.9
  +++ fileacc.c 1999/05/25 03:14:14     1.10
  @@ -56,6 +56,7 @@
   #include "fileio.h"
   #include "apr_file_io.h"
   #include "apr_general.h"
  +#include "apr_lib.h"
   #include <errno.h>
   #include <string.h>
   #include <sys/types.h>
  @@ -65,7 +66,7 @@
   ap_status_t ap_get_filename(struct file_t *thefile, char **new)
   {
       if (thefile != NULL) {
  -        *new = thefile->fname;
  +        *new = ap_pstrdup(thefile->cntxt->pool, thefile->fname);
           return APR_SUCCESS;
       }
       else {
  
  
  
  1.13      +17 -17    apache-apr/apr/file_io/unix/filedup.c
  
  Index: filedup.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/file_io/unix/filedup.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- filedup.c 1999/05/24 17:28:16     1.12
  +++ filedup.c 1999/05/25 03:14:14     1.13
  @@ -56,29 +56,29 @@
   #include "fileio.h"
   #include "apr_file_io.h"
   #include "apr_general.h"
  +#include "apr_lib.h"
   #include <string.h>
   
  -ap_status_t ap_dupfile(struct file_t *old_file, struct file_t **new)
  +ap_status_t ap_dupfile(struct file_t *old_file, struct file_t **new_file)
   {
  -    struct file_t *new_file = (struct file_t 
*)ap_palloc(old_file->cntxt->pool,
  +    (*new_file) = (struct file_t *)ap_palloc(old_file->cntxt->pool,
                                  sizeof(struct file_t));
       
  -    if (new_file == NULL) {
  -        *new = NULL;
  +    if ((*new_file) == NULL) {
           return APR_ENOMEM;
  -    } 
  -    old_file->filedes = dup(new_file->filedes); 
  -    old_file->fname = strdup(new_file->fname);
  -    old_file->buffered = new_file->buffered;
  -    old_file->protection = new_file->protection;
  -    old_file->user = new_file->user;
  -    old_file->group = new_file->group;
  -    old_file->size = new_file->size;
  -    old_file->atime = new_file->atime;    
  -    old_file->mtime = new_file->mtime;
  -    old_file->ctime = new_file->ctime;
  -    ap_register_cleanup(old_file->cntxt->pool, (void *)new_file, 
file_cleanup, NULL);
  -    *new = new_file;
  +    }
  +    (*new_file)->cntxt = old_file->cntxt; 
  +    (*new_file)->filedes = dup(old_file->filedes); 
  +    (*new_file)->fname = ap_pstrdup(old_file->cntxt->pool, old_file->fname);
  +    (*new_file)->buffered = old_file->buffered;
  +    (*new_file)->protection = old_file->protection;
  +    (*new_file)->user = old_file->user;
  +    (*new_file)->group = old_file->group;
  +    (*new_file)->size = old_file->size;
  +    (*new_file)->atime = old_file->atime;    
  +    (*new_file)->mtime = old_file->mtime;
  +    (*new_file)->ctime = old_file->ctime;
  +    ap_register_cleanup((*new_file)->cntxt->pool, (void *)(*new_file), 
file_cleanup, NULL);
       return APR_SUCCESS;
   }
   
  
  
  
  1.24      +12 -18    apache-apr/apr/file_io/unix/open.c
  
  Index: open.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/file_io/unix/open.c,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- open.c    1999/05/24 17:28:16     1.23
  +++ open.c    1999/05/25 03:14:15     1.24
  @@ -76,13 +76,12 @@
   ap_status_t ap_open(ap_context_t *cont, char *fname, ap_int32_t flag,  
ap_fileperms_t perm, struct file_t **new)
   {
       int oflags = 0;
  -    struct file_t *dafile;
       struct stat info;
       mode_t mode = get_fileperms(perm);    
   
  -    dafile = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
  +   (*new) = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
   
  -    dafile->cntxt = cont;
  +    (*new)->cntxt = cont;
   
       if ((flag & APR_READ) && (flag & APR_WRITE)) {
           oflags = O_RDWR;
  @@ -94,15 +93,14 @@
           oflags = O_WRONLY;
       }
       else {
  -        dafile->filedes = -1;
  -        *new = dafile;
  +       (*new)->filedes = -1;
           return APR_EACCES; 
       }
   
       if (flag & APR_BUFFERED) {
  -        dafile->buffered = TRUE;
  +       (*new)->buffered = TRUE;
       }
  -    dafile->fname = strdup(fname);
  +   (*new)->fname = strdup(fname);
   
       if (flag & APR_CREATE) {
           oflags |= O_CREAT; 
  @@ -111,8 +109,7 @@
        }
       }
       if ((flag & APR_EXCL) && !(flag & APR_CREATE)) {
  -        dafile->filedes = -1;
  -        *new = dafile;
  +       (*new)->filedes = -1;
           return APR_EACCES;
       }   
   
  @@ -123,22 +120,19 @@
           oflags |= O_TRUNC;
       }
    
  -    dafile->filedes = open(fname, oflags, mode);
  +   (*new)->filedes = open(fname, oflags, mode);
       
  -    if (dafile->filedes < 0) {
  -        dafile->filedes = -1;
  -        *new = dafile;
  +    if ((*new)->filedes < 0) {
  +       (*new)->filedes = -1;
           return errno;
       }
   
  -    if (ap_updatefileinfo(dafile) == APR_SUCCESS) {
  -     ap_register_cleanup(dafile->cntxt->pool, (void *)dafile, file_cleanup, 
NULL);
  -        *new = dafile;
  +    if (ap_updatefileinfo(*new) == APR_SUCCESS) {
  +     ap_register_cleanup((*new)->cntxt->pool, (void *)(*new), file_cleanup, 
NULL);
           return APR_SUCCESS;
       }
       else {
  -        dafile->filedes = -1;
  -        *new = dafile;
  +       (*new)->filedes = -1;
           return APR_ENOSTAT;
       }
   }
  
  
  
  1.9       +2 -5      apache-apr/apr/file_io/unix/pipe.c
  
  Index: pipe.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/file_io/unix/pipe.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- pipe.c    1999/05/24 17:28:16     1.8
  +++ pipe.c    1999/05/25 03:14:15     1.9
  @@ -83,15 +83,12 @@
   
   ap_status_t ap_create_namedpipe(ap_context_t *cont, char *dirpath, 
ap_fileperms_t perm, char **new)
   {
  -    char *tmp;
       mode_t mode = get_fileperms(perm);
   
  -    tmp = tempnam(dirpath, NULL);
  -    if (mkfifo(tmp, mode) == -1) {
  -        *new = NULL;
  +    *new = tempnam(dirpath, NULL);
  +    if (mkfifo((*new), mode) == -1) {
           return errno;
       }
  -    *new = tmp;
       return APR_SUCCESS;
   } 
           
  
  
  
  1.11      +5 -3      apache-apr/apr/file_io/unix/readwrite.c
  
  Index: readwrite.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/file_io/unix/readwrite.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- readwrite.c       1999/05/24 17:28:16     1.10
  +++ readwrite.c       1999/05/25 03:14:15     1.11
  @@ -56,20 +56,22 @@
   #include "fileio.h"
   #include "apr_file_io.h"
   #include "apr_general.h"
  +#include "apr_lib.h"
   #include "apr_errno.h"
   #include <errno.h>
   #include <unistd.h>
   #include <sys/uio.h>
   
  -ap_status_t ap_read(struct file_t *thefile, void *buf, ap_ssize_t *nbytes)
  +ap_status_t ap_read(const struct file_t *thefile, void *buf, ap_ssize_t 
*nbytes)
   {
  -    ap_size_t rv;
  +    ap_ssize_t rv;
   
       if (thefile->filedes < 0) {
           *nbytes = -1;
           return APR_EBADF;
       }
  -
  +    
  +    buf = ap_palloc(thefile->cntxt->pool, *nbytes);
       rv = read(thefile->filedes, buf, *nbytes);
   
       *nbytes = rv;
  
  
  
  1.3       +2 -2      apache-apr/apr/misc/unix/start.c
  
  Index: start.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/misc/unix/start.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- start.c   1999/05/10 14:36:27     1.2
  +++ start.c   1999/05/25 03:14:17     1.3
  @@ -67,7 +67,7 @@
       pool = ap_init_alloc();
   
       if (pool == NULL) {
  -        errno = ENOPOOL;
  +        errno = APR_ENOPOOL;
           return NULL;
       }    
       new = (ap_context_t *)ap_palloc(pool, sizeof(ap_context_t));
  @@ -98,7 +98,7 @@
   
       pool = ap_make_sub_pool(cont->pool);
       if (pool == NULL) {
  -        errno = ENOPOOL;
  +        errno = APR_ENOPOOL;
           return NULL;
       }    
       new = (ap_context_t *)ap_palloc(pool, sizeof(ap_context_t));
  
  
  
  1.20      +8 -5      apache-apr/apr/test/testfile.c
  
  Index: testfile.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/testfile.c,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- testfile.c        1999/05/24 17:28:18     1.19
  +++ testfile.c        1999/05/25 03:14:18     1.20
  @@ -73,11 +73,14 @@
       ap_uint64_t rv = 0;
       ap_ssize_t nbytes = 0;
       ap_off_t zer = 0;
  -    char buf;
  +    char *buf;
       char *str;
       char *filename = "test.fil";
   
  -    context = ap_initialize(NULL);
  +    if ((context = ap_initialize(NULL)) == NULL) {
  +        fprintf(stderr, "Couldn't allocate context.");
  +        exit(-1);
  +    }
   
       fprintf(stdout, "Testing file functions.\n");
   
  @@ -106,7 +109,7 @@
   
       fprintf(stdout, "\tWriting to file.......");
       
  -    nbytes = (ap_uint64_t)strlen("this is a test");
  +    nbytes = (ap_ssize_t)strlen("this is a test");
       if (ap_write(thefile, "this is a test", &nbytes) != APR_SUCCESS) {
           perror("something's wrong");
           exit(-1);
  @@ -130,8 +133,8 @@
       }
   
       fprintf(stdout, "\tReading from the file.......");
  -    nbytes = (ap_uint64_t)strlen("this is a test");
  -    if (ap_read(thefile, &buf, &nbytes) != APR_SUCCESS) {
  +    nbytes = (ap_ssize_t)strlen("this is a test");
  +    if (ap_read(thefile, buf, &nbytes) != APR_SUCCESS) {
           perror("something's wrong");
           exit(-1);
       }
  
  
  
  1.4       +1 -2      apache-apr/apr/test/testthread.c
  
  Index: testthread.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/testthread.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- testthread.c      1999/05/24 18:16:45     1.3
  +++ testthread.c      1999/05/25 03:14:18     1.4
  @@ -116,8 +116,7 @@
       ap_status_t st;
   
       fprintf(stdout, "Initializing the context......."); 
  -    context = ap_initialize(NULL);
  -    if (context == NULL) {
  +    if (ap_create_context(NULL, NULL,context) != APR_SUCCESS) {
           fprintf(stderr, "could not initialize\n");
           exit(-1);
       }
  
  
  
  1.13      +1 -0      apache-apr/include/apr_errno.h
  
  Index: apr_errno.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/include/apr_errno.h,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- apr_errno.h       1999/05/24 18:16:48     1.12
  +++ apr_errno.h       1999/05/25 03:14:19     1.13
  @@ -370,6 +370,7 @@
   #define APR_ENOPOOL        4002
   #define APR_ENOFILE        4003
   #define APR_EBADDATE       4004
  +#define APR_ENOCONT        4005
   
   #ifdef __cplusplus
   }
  
  
  
  1.30      +1 -1      apache-apr/include/apr_file_io.h
  
  Index: apr_file_io.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/include/apr_file_io.h,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- apr_file_io.h     1999/05/24 17:28:19     1.29
  +++ apr_file_io.h     1999/05/25 03:14:20     1.30
  @@ -108,7 +108,7 @@
   ap_status_t ap_close(ap_file_t *);
   ap_status_t ap_remove_file(ap_context_t *, char *);
   
  -ap_status_t ap_read(ap_file_t *, void *, ap_ssize_t *);
  +ap_status_t ap_read(const ap_file_t *, void *, ap_ssize_t *);
   ap_status_t ap_write(ap_file_t *, void *, ap_ssize_t *);
   ap_status_t ap_writev(ap_file_t *, const ap_iovec_t *, ap_ssize_t *);
   
  
  
  

Reply via email to