4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-28 12:05:47 +08:00

* 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> 2012-04-06 Christopher Faylor <me.cygwin2012@cgf.cx>
* fhandler.h (fhandler_base::nohandle): Implement "by hand" rather than * 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) if (fd == -1)
fd = cygheap->fdtab.find_unused_handle (); fd = cygheap->fdtab.find_unused_handle ();
fhandler_base *fh = build_fh_name (name); fhandler_base *fh = build_fh_name (name);
if (!fh)
return -1;
cygheap->fdtab[fd] = fh; cygheap->fdtab[fd] = fh;
cygheap->fdtab[fd]->refcnt (1); cygheap->fdtab[fd]->refcnt (1);
fh->init (handle, myaccess, bin ?: fh->pc_binmode ()); fh->init (handle, myaccess, bin ?: fh->pc_binmode ());
@ -337,6 +339,9 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle)
else else
fh = build_fh_name (name); fh = build_fh_name (name);
if (!fh)
return;
if (name[0]) if (name[0])
{ {
bin = fh->pc_binmode (); bin = fh->pc_binmode ();

View File

@ -526,7 +526,8 @@ mmap_record::alloc_fh ()
fdev.name = fdev.native = ""; fdev.name = fdev.native = "";
fdev.parse (get_device ()); fdev.parse (get_device ());
fhandler_base *fh = build_fh_dev (fdev); fhandler_base *fh = build_fh_dev (fdev);
fh->set_access (get_openflags ()); if (fh)
fh->set_access (get_openflags ());
return fh; 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. */ /* FIXME: Calling build_fhandler here is not the right way to handle this. */
fhandler_virtual *fh = (fhandler_virtual *) build_fh_dev (dev, path_copy); fhandler_virtual *fh = (fhandler_virtual *) build_fh_dev (dev, path_copy);
virtual_ftype_t file_type = fh->exists (); virtual_ftype_t file_type;
if (file_type == virt_symlink) if (!fh)
file_type = virt_none;
else
{ {
fh->fill_filebuf (); file_type = fh->exists ();
symlen = sym.set (fh->get_filebuf ()); if (file_type == virt_symlink)
{
fh->fill_filebuf ();
symlen = sym.set (fh->get_filebuf ());
}
delete fh;
} }
delete fh;
switch (file_type) switch (file_type)
{ {
case virt_directory: case virt_directory: