* fhandler_procsys.cc (fhandler_procsys::opendir): Avoid SEGV if
opening object directory fails. * fhandler_virtual.cc (fhandler_virtual::opendir): Don't leak memory.
This commit is contained in:
parent
c48947b454
commit
fe222f2210
@ -1,3 +1,9 @@
|
||||
2011-02-15 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_procsys.cc (fhandler_procsys::opendir): Avoid SEGV if
|
||||
opening object directory fails.
|
||||
* fhandler_virtual.cc (fhandler_virtual::opendir): Don't leak memory.
|
||||
|
||||
2011-02-15 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Don't
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* fhandler_procsys.cc: fhandler for native NT namespace.
|
||||
|
||||
Copyright 2010 Red Hat, Inc.
|
||||
Copyright 2010, 2011 Red Hat, Inc.
|
||||
|
||||
This file is part of Cygwin.
|
||||
|
||||
@ -245,18 +245,20 @@ fhandler_procsys::opendir (int fd)
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
NTSTATUS status;
|
||||
HANDLE h;
|
||||
DIR *dir = fhandler_virtual::opendir (fd);
|
||||
DIR *dir;
|
||||
|
||||
mk_unicode_path (&path);
|
||||
InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE, NULL, NULL);
|
||||
status = NtOpenDirectoryObject (&h, DIRECTORY_QUERY, &attr);
|
||||
if (!NT_SUCCESS (status))
|
||||
{
|
||||
free (dir);
|
||||
__seterrno_from_nt_status (status);
|
||||
return NULL;
|
||||
}
|
||||
dir->__handle = h;
|
||||
if (!(dir = fhandler_virtual::opendir (fd)))
|
||||
NtClose (h);
|
||||
else
|
||||
dir->__handle = h;
|
||||
return dir;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* fhandler_virtual.cc: base fhandler class for virtual filesystems
|
||||
|
||||
Copyright 2002, 2003, 2004, 2005, 2007, 2008, 2009 Red Hat, Inc.
|
||||
Copyright 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
|
||||
|
||||
This file is part of Cygwin.
|
||||
|
||||
@ -59,6 +59,7 @@ fhandler_virtual::opendir (int fd)
|
||||
else if ((dir->__d_dirent =
|
||||
(struct dirent *) malloc (sizeof (struct dirent))) == NULL)
|
||||
{
|
||||
free (dir->__d_dirname);
|
||||
free (dir);
|
||||
set_errno (ENOMEM);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user