Be careful with fdopendir() on RELENG_7

Garrett Cooper yanefbsd at gmail.com
Tue Mar 30 00:45:24 UTC 2010


On Mon, Mar 29, 2010 at 12:53 PM, Christian Weisgerber
<naddy at mips.inka.de> wrote:
> 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.

    Is there a bug outstanding for this?
Thanks,
-Garrett


More information about the freebsd-ports mailing list