This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Problem with bug-readdir1
- From: Ian Wienand <ianw at gelato dot unsw dot edu dot au>
- To: libc-alpha at sources dot redhat dot com
- Date: Wed, 4 Dec 2002 12:19:38 +1100
- Subject: Problem with bug-readdir1
RE my last patch for IA64 inline syscall support, the only thing that
broke was this test.
In the test the dirent is closed and then attempted to be re-opened.
However, on close the memory is free'd leaving us an invalid pointer.
To fix this I
1. reset the test pointer to null after closing
--- dirent/bug-readdir1.c.old 2002-12-04 12:10:18.000000000 +1100
+++ dirent/bug-readdir1.c 2002-12-04 11:36:09.000000000 +1100
@@ -30,6 +30,8 @@
exit (1);
}
+ dirp = NULL ;
+
ent = readdir (dirp);
return ent != NULL || errno != EBADF;
2. check for null on entry to readdir, set EBADF and return NULL as
manpage suggests.
--- sysdeps/unix/readdir.c.old 2002-12-04 12:14:36.000000000 +1100
+++ sysdeps/unix/readdir.c 2002-12-04 11:38:29.000000000 +1100
@@ -42,6 +42,12 @@
DIRENT_TYPE *dp;
int saved_errno = errno;
+ if ( dirp == NULL )
+ {
+ __set_errno(EBADF);
+ return NULL;
+ }
+
__libc_lock_lock (dirp->lock);
--- sysdeps/unix/readdir_r.c.old 2002-12-04 12:14:36.000000000 +1100
+++ sysdeps/unix/readdir_r.c 2002-12-04 11:39:02.000000000 +1100
@@ -43,6 +43,12 @@
size_t reclen;
const int saved_errno = errno;
+ if ( dirp == NULL )
+ {
+ __set_errno(EBADF);
+ return NULL;
+ }
+
__libc_lock_lock (dirp->lock);
do
-i
ianw@gelato.unsw.edu.au