* 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