summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_disk_file.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-11-05 16:53:55 +0000
committerChristopher Faylor <me@cgf.cx>2003-11-05 16:53:55 +0000
commitd417aec9089e59f0f667290ebe777ef554ac5103 (patch)
tree2468da418fb4837cfe3074cc0ab33912fe146271 /winsup/cygwin/fhandler_disk_file.cc
parent1be28abadf705fb869cf01b4481677af4a70dca4 (diff)
downloadcygnal-d417aec9089e59f0f667290ebe777ef554ac5103.tar.gz
cygnal-d417aec9089e59f0f667290ebe777ef554ac5103.tar.bz2
cygnal-d417aec9089e59f0f667290ebe777ef554ac5103.zip
* fhandler_disk_file.cc (fhandler_disk_file::opendir): Detect attempt to open a
directory which lacks read privileges.
Diffstat (limited to 'winsup/cygwin/fhandler_disk_file.cc')
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index 1c11636e9..20ed66124 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -617,15 +617,20 @@ fhandler_disk_file::opendir ()
set_errno (ENOMEM);
else if ((dir->__d_dirname = (char *) malloc (len + 3)) == NULL)
{
- free (dir);
set_errno (ENOMEM);
+ free (dir);
}
else if ((dir->__d_dirent =
(struct dirent *) malloc (sizeof (struct dirent))) == NULL)
{
+ set_errno (ENOMEM);
+ free (dir);
free (dir->__d_dirname);
+ }
+ else if (access_worker (pc, R_OK) != 0)
+ {
free (dir);
- set_errno (ENOMEM);
+ free (dir->__d_dirname);
}
else
{