[PATCH] realpath: Do not copy result on failure (BZ #28815)
Adhemerval Zanella
adhemerval.zanella@linaro.org
Thu Feb 10 12:36:46 GMT 2022
On 24/01/2022 13:54, Siddhesh Poyarekar via Libc-alpha wrote:
> On failure, the contents of the resolved buffer passed in by the caller
> to realpath are undefined. Do not copy any partial resolution to the
> buffer and also do not test resolved contents in test-canon.c.
>
> Resolves: BZ #28815
>
> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> stdlib/canonicalize.c | 4 ++--
> stdlib/test-canon.c | 4 +++-
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c
> index 6caed9e70e..6237a41d42 100644
> --- a/stdlib/canonicalize.c
> +++ b/stdlib/canonicalize.c
> @@ -400,11 +400,11 @@ realpath_stk (const char *name, char *resolved,
>
> error:
> *dest++ = '\0';
> - if (resolved != NULL)
> + if (!failed && resolved != NULL)
> {
> if (dest - rname <= get_path_max ())
> rname = strcpy (resolved, rname);
> - else if (!failed)
> + else
> {
> failed = true;
> __set_errno (ENAMETOOLONG);
> diff --git a/stdlib/test-canon.c b/stdlib/test-canon.c
> index 185ccf4f48..2ad1218749 100644
> --- a/stdlib/test-canon.c
> +++ b/stdlib/test-canon.c
> @@ -174,7 +174,9 @@ do_test (int argc, char ** argv)
> continue;
> }
>
> - if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
> + /* Only on success verify that buf contains the result too. */
> + if (result != NULL
> + && !check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
> {
> printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n",
> argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,
More information about the Libc-alpha
mailing list