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