stdlib: Test using setenv with updated environ [BZ #32588]

Message ID 20250124222318.2392916-1-hjl.tools@gmail.com (mailing list archive)
State Committed
Commit 8ab34497de14e35aff09b607222fe1309ef156da
Headers
Series stdlib: Test using setenv with updated environ [BZ #32588] |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 fail Patch failed to apply
linaro-tcwg-bot/tcwg_glibc_build--master-arm fail Patch failed to apply
redhat-pt-bot/TryBot-32bit success Build for i686

Commit Message

H.J. Lu Jan. 24, 2025, 10:23 p.m. UTC
  Add a test for setenv with updated environ.  Verify that BZ #32588 is
fixed.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 stdlib/Makefile             |  1 +
 stdlib/tst-setenv-environ.c | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100644 stdlib/tst-setenv-environ.c
  

Comments

Florian Weimer Jan. 24, 2025, 11:08 p.m. UTC | #1
* H. J. Lu:

> +int
> +do_test (void)
> +{
> +  char *valp;
> +  static char *dummy_environ[] = { NULL };
> +  environ = dummy_environ;
> +  setenv ("A", "1", 0);
> +  valp = getenv ("A");
> +  TEST_VERIFY_EXIT (valp[0] == '1' && valp[1] == '\0');
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>

Looks good.

Reviewed-by: Florian Weimer <fweimer@redhat.com>

Thanks,
Florian
  
H.J. Lu Jan. 24, 2025, 11:33 p.m. UTC | #2
On Sat, Jan 25, 2025 at 7:09 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * H. J. Lu:
>
> > +int
> > +do_test (void)
> > +{
> > +  char *valp;
> > +  static char *dummy_environ[] = { NULL };
> > +  environ = dummy_environ;
> > +  setenv ("A", "1", 0);
> > +  valp = getenv ("A");
> > +  TEST_VERIFY_EXIT (valp[0] == '1' && valp[1] == '\0');
> > +  return 0;
> > +}
> > +
> > +#include <support/test-driver.c>
>
> Looks good.
>
> Reviewed-by: Florian Weimer <fweimer@redhat.com>
>
> Thanks,
> Florian
>

Pushed.  OK to backport to release branches?

Thanks.
  
Sam James Jan. 25, 2025, 3:25 a.m. UTC | #3
"H.J. Lu" <hjl.tools@gmail.com> writes:

> On Sat, Jan 25, 2025 at 7:09 AM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> * H. J. Lu:
>>
>> > +int
>> > +do_test (void)
>> > +{
>> > +  char *valp;
>> > +  static char *dummy_environ[] = { NULL };
>> > +  environ = dummy_environ;
>> > +  setenv ("A", "1", 0);
>> > +  valp = getenv ("A");
>> > +  TEST_VERIFY_EXIT (valp[0] == '1' && valp[1] == '\0');
>> > +  return 0;
>> > +}
>> > +
>> > +#include <support/test-driver.c>
>>
>> Looks good.
>>
>> Reviewed-by: Florian Weimer <fweimer@redhat.com>
>>
>> Thanks,
>> Florian
>>
>
> Pushed.  OK to backport to release branches?

Please do. Thanks.

>
> Thanks.
  

Patch

diff --git a/stdlib/Makefile b/stdlib/Makefile
index a5fbc1a27e..a360f998af 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -316,6 +316,7 @@  tests := \
   tst-setcontext9 \
   tst-setcontext10 \
   tst-setcontext11 \
+  tst-setenv-environ \
   tst-stdbit-Wconversion \
   tst-stdbit-builtins \
   tst-stdc_bit_ceil \
diff --git a/stdlib/tst-setenv-environ.c b/stdlib/tst-setenv-environ.c
new file mode 100644
index 0000000000..02fcef96d0
--- /dev/null
+++ b/stdlib/tst-setenv-environ.c
@@ -0,0 +1,36 @@ 
+/* Test using setenv with updated environ.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <support/check.h>
+
+extern char **environ;
+
+int
+do_test (void)
+{
+  char *valp;
+  static char *dummy_environ[] = { NULL };
+  environ = dummy_environ;
+  setenv ("A", "1", 0);
+  valp = getenv ("A");
+  TEST_VERIFY_EXIT (valp[0] == '1' && valp[1] == '\0');
+  return 0;
+}
+
+#include <support/test-driver.c>