[LTP] [PATCH 1/1] tst_tmpdir: Remove possible double/trailing slashes from TMPDIR

Li Wang liwang@redhat.com
Wed Apr 19 08:47:30 CEST 2023


Hi Petr,

On Thu, Apr 13, 2023 at 7:14 PM Petr Vorel <pvorel@suse.cz> wrote:

> Similarly to previous commit, which normalized TMPDIR for shell API,
> do the same for C API.
>
> Unlike for shell API, here we modify $TMPDIR directly, because
> tst_get_tmpdir_root() is used o more places.
>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> Follow up of the same change in shell API:
> https://lore.kernel.org/ltp/20230412073953.1983857-1-pvorel@suse.cz/
>
> Kind regards,
> Petr
>
>  lib/tst_tmpdir.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/lib/tst_tmpdir.c b/lib/tst_tmpdir.c
> index b73b5c66f..8db5c47e8 100644
> --- a/lib/tst_tmpdir.c
> +++ b/lib/tst_tmpdir.c
> @@ -124,16 +124,28 @@ char *tst_get_tmpdir(void)
>
>  const char *tst_get_tmpdir_root(void)
>  {
> -       const char *env_tmpdir = getenv("TMPDIR");
> +       char *env_tmpdir = getenv("TMPDIR");
>

It seems that modifying the environment variables is generally
not a good practice.

The getenv() function returns a pointer to the value of an
environment variable, which is stored in the memory managed
by the system. Any attempt to modify this memory directly can
cause unexpected behavior or even crash the program.

Instead of modifying the return value of getenv(), it is recommended
to create a copy of the value and modify the copy instead.

Or, the simplest way I guess is just TBROK and tell users why
this TMPDIR is unusable.



> -       if (!env_tmpdir)
> +       if (env_tmpdir) {
> +               /* remove duplicate slashes */
> +               for (char *p = env_tmpdir, *q = env_tmpdir; *q;) {
> +                       if (*++q != '/' || *p != '/')
> +                               *++p = *q;
> +               }
> +               /* Remove slash on the last place  */
> +               size_t last = strlen(env_tmpdir)-1;
> +               if (env_tmpdir[last] == '/')
> +                       env_tmpdir[last] = '\0';
> +       } else {
>                 env_tmpdir = TEMPDIR;
> +       }
>
>         if (env_tmpdir[0] != '/') {
>                 tst_brkm(TBROK, NULL, "You must specify an absolute "
>                                 "pathname for environment variable
> TMPDIR");
>                 return NULL;
>         }
> +
>         return env_tmpdir;
>  }
>
> --
> 2.40.0
>
>

-- 
Regards,
Li Wang


More information about the ltp mailing list