[Mono-dev] GetFileSystemEntries() can return null, but very few null checks

Rob Wilkens robwilkens at gmail.com
Tue Jun 12 02:19:37 UTC 2012

I just used a goto in a patch i submitted tonight too:  I enabled the 
ability of Win32 to send an idle event message when the app goes idle.  
Previously, Win32 mono was not doing that.

Sent on github, if someone wants to review.  I tested relevant code on 
relevant platforms.


On 06/11/2012 10:14 PM, Steven Boswell II wrote:
> Since no one seems inclined to look at this bug, here's my proposed fix.
> The problem seems to be 
> that ves_icall_System_IO_MonoIO_GetFileSystemEntries() can return NULL 
> without setting an error.
> So I rewrote the code to create an empty string-array in that case.
> My code uses the dreaded "goto", but IMHO that's no worse than a 
> return statement in the middle of a function.  Besides, in assembly 
> language, all we have is goto :-)
> Steven Boswell
> ------------------------------------------------------------------------
> *From:* Steven Boswell II <ulatekh at yahoo.com>
> *To:* "mono-devel-list at lists.ximian.com" 
> <mono-devel-list at lists.ximian.com>
> *Sent:* Friday, June 8, 2012 5:43 PM
> *Subject:* [Mono-dev] GetFileSystemEntries() can return null, but very 
> few null checks
> Today, rather randomly, I got an unhandled NullReferenceException in 
> mcs/class/System/System.IO/DefaultWatcher.cs at line 221 -- "files" 
> was null.  All the places that "files" gets set can't be null, except 
> for the one on line 204, a call to Directory.GetFileSystemEntries(). 
>  That led to mcs/class/corlib/System.IO/Directory.cs line 497, which 
> led to mcs/class/corlib/System.IO/MonoIO.cs line 177, which led to a C 
> function called ves_icall_System_IO_MonoIO_GetFileSystemEntries(), 
> which starts at line 319 of mono/metadata/file-io.c .  That function 
> can return null in several different ways.
> Looking around, this seems to be a general problem...
> Files that call GetFileSystemEntries() and check for null:
> mcs/class/System.Web/System.Web.Hosting/ApplicationHost.cs
> Files that call GetFileSystemEntries() without checking for null:
> mcs/class/Compat.ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib/Tar/TarEntry.cs
> mcs/class/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib/Tar/TarEntry.cs
> mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/MSBuildUtils.cs
> mcs/class/Mono.Posix/Mono.Unix/UnixDirectoryInfo.cs
> mcs/class/System/System.IO/DefaultWatcher.cs
> mcs/tools/macpack/MacPack.cs
> mcs/tools/monodoc/Lucene.Net/Lucene.Net/SupportClass.cs
> Files with a GetFileSystemEntries() that can return null:
> mcs/class/corlib/Linux/Linux.cs
> mono/metadata/file-io.c
> If fixing this is as simple as adding null checks to the affected 
> areas, I can crank that out and submit a patch.  Otherwise, someone 
> more knowledgeable than me needs to look into this.
> I don't see any bug reports in either bugzilla.novell.com 
> <http://bugzilla.novell.com> or bugzilla.xamarin.com 
> <http://bugzilla.xamarin.com> about this issue.  I searched "Mono 
> class libraries" and "Mono runtime".  There were a few other issues 
> related to GetFileSystemEntries(), but none that sounded like this. 
>  So I filed one... https://bugzilla.xamarin.com/show_bug.cgi?id=5591 .
> Steven Boswell
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com <mailto:Mono-devel-list at lists.ximian.com>
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20120611/43ba900f/attachment.html>

More information about the Mono-devel-list mailing list