[LTP] [PATCH 1/1] tst_tmpdir: Remove possible double/trailing slashes from TMPDIR
Li Wang
liwang@redhat.com
Wed Apr 19 09:02:57 CEST 2023
On Wed, Apr 19, 2023 at 2:47 PM Li Wang <liwang@redhat.com> wrote:
> 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.
>
Btw, the wise method is to use setenv() function to reset
environment variables if really needed.
This is a different part of shell API I have to say.
> 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
>
--
Regards,
Li Wang
More information about the ltp
mailing list