[Mono-list] Re: mono_string_null(NULL)
Matt Kimball
matt@kimball.net
Wed, 09 Jan 2002 05:29:35 -0800 (PST)
Paolo Molaro wrote
> On 01/08/02 Matt Kimball wrote:
> > mono/metadata : ChangeLog object.c
> >
> > Log message:
> > Tue Jan 8 22:47:44 EST 2002 Matt Kimball <matt@kimball.net>
> > * object.c: mono_string_new should return a NULL when the string
> > passed in is NULL -- not try to deference it.
>
> I don't agree with this change: it will hide bugs in the code.
The reason I made this particular change was in response to the trampoline code
I just changed in arch/x86/tramp.c which manages strings returned by functions
in non-internal pinvoke'd calls. Before, when you tried to call
System.Private.Wrapper.readdir(), you'd soon crash the runtime because it would
assume that the char* returned was actually a pointer to an object. Now, it
will call mono_string_new() after the function returns to wrap the returned
string in a string object.
One problem was that if readdir() returns NULL (i.e. end-of-directory), it would
pass a NULL pointer into mono_string_new(), which would throw an exception in
response to the null pointer dereference. Obviously this is wrong -- readdir
should return NULL, now throw an exception. That's why I made that particular
change.
Would it be better for to revert that change, and write a wrapper around
mono_string_new() which checks for NULLs, and use that wrapper in
arch/x86/tramp.c? (And, that way mono_string_new() would still throw an
exception on NULL).
--
Matt Kimball
matt@kimball.net