* 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>
|
2011-02-15 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Don't
|
* fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Don't
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* fhandler_procsys.cc: fhandler for native NT namespace.
|
/* 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.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -245,18 +245,20 @@ fhandler_procsys::opendir (int fd)
|
||||||
OBJECT_ATTRIBUTES attr;
|
OBJECT_ATTRIBUTES attr;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
DIR *dir = fhandler_virtual::opendir (fd);
|
DIR *dir;
|
||||||
|
|
||||||
mk_unicode_path (&path);
|
mk_unicode_path (&path);
|
||||||
InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE, NULL, NULL);
|
InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE, NULL, NULL);
|
||||||
status = NtOpenDirectoryObject (&h, DIRECTORY_QUERY, &attr);
|
status = NtOpenDirectoryObject (&h, DIRECTORY_QUERY, &attr);
|
||||||
if (!NT_SUCCESS (status))
|
if (!NT_SUCCESS (status))
|
||||||
{
|
{
|
||||||
free (dir);
|
|
||||||
__seterrno_from_nt_status (status);
|
__seterrno_from_nt_status (status);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
dir->__handle = h;
|
if (!(dir = fhandler_virtual::opendir (fd)))
|
||||||
|
NtClose (h);
|
||||||
|
else
|
||||||
|
dir->__handle = h;
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* fhandler_virtual.cc: base fhandler class for virtual filesystems
|
/* 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.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -59,6 +59,7 @@ fhandler_virtual::opendir (int fd)
|
||||||
else if ((dir->__d_dirent =
|
else if ((dir->__d_dirent =
|
||||||
(struct dirent *) malloc (sizeof (struct dirent))) == NULL)
|
(struct dirent *) malloc (sizeof (struct dirent))) == NULL)
|
||||||
{
|
{
|
||||||
|
free (dir->__d_dirname);
|
||||||
free (dir);
|
free (dir);
|
||||||
set_errno (ENOMEM);
|
set_errno (ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue