* dtable.cc (cygwin_attach_handle_to_fd): Defend against NULL return from

build_fh_*.
(dtable::init_std_file_from_handle): Ditto.
* mmap.cc (mmap_record::alloc_fh): Ditto.
* path.cc (path_conv::check): Ditto.
This commit is contained in:
Christopher Faylor 2012-04-07 17:32:44 +00:00
parent 00ceaad134
commit e5b7e4d1c7
4 changed files with 26 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2012-04-07 Christopher Faylor <me.cygwin2012@cgf.cx>
* dtable.cc (cygwin_attach_handle_to_fd): Defend against NULL return
from build_fh_*.
(dtable::init_std_file_from_handle): Ditto.
* mmap.cc (mmap_record::alloc_fh): Ditto.
* path.cc (path_conv::check): Ditto.
2012-04-06 Christopher Faylor <me.cygwin2012@cgf.cx>
* fhandler.h (fhandler_base::nohandle): Implement "by hand" rather than

View File

@ -256,6 +256,8 @@ cygwin_attach_handle_to_fd (char *name, int fd, HANDLE handle, mode_t bin,
if (fd == -1)
fd = cygheap->fdtab.find_unused_handle ();
fhandler_base *fh = build_fh_name (name);
if (!fh)
return -1;
cygheap->fdtab[fd] = fh;
cygheap->fdtab[fd]->refcnt (1);
fh->init (handle, myaccess, bin ?: fh->pc_binmode ());
@ -337,6 +339,9 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle)
else
fh = build_fh_name (name);
if (!fh)
return;
if (name[0])
{
bin = fh->pc_binmode ();

View File

@ -526,7 +526,8 @@ mmap_record::alloc_fh ()
fdev.name = fdev.native = "";
fdev.parse (get_device ());
fhandler_base *fh = build_fh_dev (fdev);
fh->set_access (get_openflags ());
if (fh)
fh->set_access (get_openflags ());
return fh;
}

View File

@ -744,13 +744,19 @@ path_conv::check (const char *src, unsigned opt,
{
/* FIXME: Calling build_fhandler here is not the right way to handle this. */
fhandler_virtual *fh = (fhandler_virtual *) build_fh_dev (dev, path_copy);
virtual_ftype_t file_type = fh->exists ();
if (file_type == virt_symlink)
virtual_ftype_t file_type;
if (!fh)
file_type = virt_none;
else
{
fh->fill_filebuf ();
symlen = sym.set (fh->get_filebuf ());
file_type = fh->exists ();
if (file_type == virt_symlink)
{
fh->fill_filebuf ();
symlen = sym.set (fh->get_filebuf ());
}
delete fh;
}
delete fh;
switch (file_type)
{
case virt_directory: