realpath: Do not copy result on failure (BZ #28815)

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>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
This commit is contained in:
Siddhesh Poyarekar 2022-02-21 08:26:06 +05:30
parent b98d0bbf74
commit 949ad78a18
2 changed files with 5 additions and 3 deletions

View File

@ -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);

View File

@ -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,