[U-Boot] [PATCH] Prevent malloc with size 0

Joakim Tjernlund joakim.tjernlund at transmode.se
Fri Oct 22 08:10:16 CEST 2010


Mike Frysinger <vapier at gentoo.org> wrote on 2010/10/21 21:51:53:
> 
> On Thursday, October 21, 2010 07:45:10 Joakim Tjernlund wrote:
> > Wolfgang Denk wrote on 2010/10/21 13:32:54:
> > > Joakim Tjernlund you wrote:
> > > > > -  if ((long)bytes < 0) return 0;
> > > > > +  if ((long)bytes <= 0) return 0;
> > > > 
> > > > I think you should return some impossible ptr value =! NULL
> > > > Size 0 not really an error.
> > > 
> > > It is legal for malloc() to return NULL in case of size==0,
> > > and for the sake of simplicity I recommend we do just that.
> > 
> > Yes, but not very useful. Glibc does not return NULL
> 
> it is useful for malloc(0) == NULL.  the glibc behavior is downright 
> obnoxious.  we disable this for uClibc and dont see problems.  if 
anything, we 
> catch accidental programming mistakes which then get fixed.

There is a value in having the possibility to express a
0 bytes data set. Consider this simple example:
An app read lines from a file and mallocs each line read and builds an
array with malloced pointers. The last entry is a NULL ptr to
signal EOF. This breaks down for empty lines if malloc(0)
returns NULL. 

Not to mention error handling, as I recall, a malloc(0) that returns NULL
does not set errno which screws error handling. One have to bend over
just to cope with this.
 
> 
> why exactly do you want malloc(0) to return valid memory ?  i would 
rather 
> have u-boot return an error.

Ideally it should return a ptr to invalid memory so you get a SEGV if you
try to defer the ptr but I take anything over a NULL ptr.

 Jocke


More information about the U-Boot mailing list