Be careful with fdopendir() on RELENG_7

Christian Weisgerber naddy at mips.inka.de
Mon Mar 29 19:53:52 UTC 2010


There is a silly bug in RELENG_7 up to and including RELENG_7_3:
fdopendir(3) is available in libc, but the prototype is missing
from <dirent.h>.

This can have unexpected consequences.  A configure script can
notice that fdopendir() is available, but due to the missing
prototype, the function will be typed as the default

  int fdopendir();

This is bad.  fdopendir() returns a pointer and unless correctly
prototyped, the return value will be truncated from 64 to 32 bits
on LP64 platforms.

So if you notice that something picks up the fdopendir() function
you need to either disable it for 702102 to 703100 (inclusive) or
make sure that the correct prototype

  DIR *fdopendir(int);

is wedged in somehow.

This isn't a hypothetical concern.  When I initially tried gtar
1.23 on 7.3/amd64, it left a trail of coredumps because of this.

-- 
Christian "naddy" Weisgerber                          naddy at mips.inka.de



More information about the freebsd-ports mailing list