Re: NULL pointer or objptr should not pass the validity check.
Matthew Fluet <[email protected]> Sat, 11 May 2013 06:48:23 -0400
| Newsgroups | gmane.comp.lang.ml.mlton.devel |
|---|---|
| Message-ID | <CAMrhFL79SP_MfQC2ztU+NJbCb+=_EZVAX0cmC9NqnvVhpbSWdg@mail.gmail.com> |
On Thu, May 9, 2013 at 5:27 AM, 吴佳森 <[email protected]> wrote: > When I was porting the MLton, I met two segment faults. And after careful > inspection on the trace, I made following changes to runtime/gc/objptr.c and > runtime/gc/pointer.c. > > The changes are about deciding whether the given pointer or objptr is valid. > The original code only check the last few bits must be zero, and hence NULL > pointer is also considered valid. I don't think NULL pointer should pass the > check hence made the changes. > > I am not sure if I'm correct on the judgement because I guess if may also be > some problem elsewhere that introduce the NULL pointer to GC. > > Could someone please have a check on it? I would appreciate any feed back > for it. Thank you very much. The isObjptr and isPointer functions are used by the garbage collector to distinguish true pointers to ML objects from other data that is packed into a pointer-sized field (and that could, sometimes, be a true pointer). The canonical example is a type like: (int * int) option The SOME variant must be represented as a pointer to the (int * int) tuple, but the NONE variant can be represented by a pointer-sized word with non-zero low bits. This should always be the case --- either the word being inspected by isObjptr/isPointer is a true pointer or it has non-zero low bits. I don't believe that it these functions should ever be called on NULL. I think the better choice would be to add: assert (0 != p) If these functions are being called on NULL, then the heap has been corrupted at some earlier point. Returning 'false' and treating the NULL as a non-pointer will simply mask the corruption for a little longer. ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may _______________________________________________ MLton-devel mailing list [email protected]; [email protected] https://lists.sourceforge.net/lists/listinfo/mlton-devel