diff options
author | Christopher Faylor <me@cgf.cx> | 2003-11-05 16:53:55 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-11-05 16:53:55 +0000 |
commit | d417aec9089e59f0f667290ebe777ef554ac5103 (patch) | |
tree | 2468da418fb4837cfe3074cc0ab33912fe146271 /winsup/cygwin/fhandler_disk_file.cc | |
parent | 1be28abadf705fb869cf01b4481677af4a70dca4 (diff) | |
download | cygnal-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.cc | 9 |
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 { |