kern/128933: realpath(3) does not follow SUS specification for
a NULL/empty path
Andrey Chernov
ache at nagual.pp.ru
Tue Nov 18 01:20:03 PST 2008
The following reply was made to PR kern/128933; it has been noted by GNATS.
From: Andrey Chernov <ache at nagual.pp.ru>
To: James Vega <vega.james at gmail.com>
Cc: freebsd-gnats-submit at freebsd.org
Subject: Re: kern/128933: realpath(3) does not follow SUS specification for
a NULL/empty path
Date: Tue, 18 Nov 2008 12:06:12 +0300
On Mon, Nov 17, 2008 at 02:04:59AM +0000, James Vega wrote:
> According to the Single Unix Specification[0], the realpath stdlib function should return NULL (to indicate an error) when the first argument to realpath is either NULL or an empty string and set errno to EINVAL/ENOENT respectively.
>
> For the empty string case, FreeBSD is currently populating resolved with the current working directory and returning the pointer to that.
>
> For the NULL case, I see no check whether path is NULL or not. Instead, the first use of it is dereferencing the pointer
>
> if (path[0] == '/'
>
> [0] - http://www.opengroup.org/onlinepubs/009695399/functions/realpath.html
The situation is even worse. realpath(3) breaks those SUS rules
("shall fail if") too:
[ENOENT] A component of file_name does not name an existing file
[ENOTDIR] A component of the path prefix is not a directory
i.e. realpath(3) does not detect fictional file name (last component)
with ENOENT and does not detect intermediate non-directories components
with ENOTDIR.
See following examples with realpath(1):
# realpath /non_existent
/non_existent
(should be "No such file or directory")
# realpath /bin/non_existent/cp
realpath: /bin/non_existent/cp: No such file or directory
(should be: "Not a directory", as early as non_existent checked)
--
http://ache.pp.ru/
More information about the freebsd-bugs
mailing list