diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-08-04 12:00:29 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-08-04 12:00:29 +0000 |
commit | 171573f2b91f8c975e78e2658c05730e9427467e (patch) | |
tree | b7ee67d2f9f0f8c0b64d366fd193b34c76e15704 /usr/src/test | |
parent | 6fa006e8e0f6560b5ad4df46db0b9cac31cb5e16 (diff) | |
parent | 60b81b86c4b2eb3a0481176c344f4b6e7a6276fa (diff) | |
download | illumos-joyent-release-20160804.tar.gz |
[illumos-gate merge]release-20160804
commit 60b81b86c4b2eb3a0481176c344f4b6e7a6276fa
7076 segfault in putenv + getenv
commit 6bd8a07093bddc0edfc07bfda4ca600e31c02c03
7218 pvscsi`pvscsi_bus_config uses wrong base while configuring targets
7219 pvscsi panics while simultaneously deleting large number of disks
Conflicts:
usr/src/test/libc-tests/runfiles/default.run
Diffstat (limited to 'usr/src/test')
-rw-r--r-- | usr/src/test/libc-tests/runfiles/default.run | 2 | ||||
-rw-r--r-- | usr/src/test/libc-tests/tests/Makefile | 1 | ||||
-rw-r--r-- | usr/src/test/libc-tests/tests/env-7076.c | 73 |
3 files changed, 76 insertions, 0 deletions
diff --git a/usr/src/test/libc-tests/runfiles/default.run b/usr/src/test/libc-tests/runfiles/default.run index 801558459a..864001eb46 100644 --- a/usr/src/test/libc-tests/runfiles/default.run +++ b/usr/src/test/libc-tests/runfiles/default.run @@ -62,6 +62,8 @@ outputdir = /var/tmp/test_results [/opt/libc-tests/tests/catopen] [/opt/libc-tests/tests/env-OS-4089.32] [/opt/libc-tests/tests/env-OS-4089.64] +[/opt/libc-tests/tests/env-7076.32] +[/opt/libc-tests/tests/env-7076.64] [/opt/libc-tests/tests/endian.32] [/opt/libc-tests/tests/endian.64] [/opt/libc-tests/tests/quick_exit] diff --git a/usr/src/test/libc-tests/tests/Makefile b/usr/src/test/libc-tests/tests/Makefile index 34c0123d88..68f6df3b2d 100644 --- a/usr/src/test/libc-tests/tests/Makefile +++ b/usr/src/test/libc-tests/tests/Makefile @@ -35,6 +35,7 @@ PROGS = \ c11_tss \ call_once \ endian \ + env-7076 \ quick_exit_order \ quick_exit_status \ timespec_get diff --git a/usr/src/test/libc-tests/tests/env-7076.c b/usr/src/test/libc-tests/tests/env-7076.c new file mode 100644 index 0000000000..6349747bd8 --- /dev/null +++ b/usr/src/test/libc-tests/tests/env-7076.c @@ -0,0 +1,73 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * Copyright 2016 Joyent, Inc. + */ + +/* + * Regression test for 7076 where doing a putenv() call without an '=' sign + * may lead to a segmentation fault when doing a getenv() depending on the + * circumstances of the environment's layout. Verify putenv() mimics + * unsetenv(). + */ + +#include <stdlib.h> +#include <stdio.h> +#include <errno.h> +#include <string.h> +#include <sys/debug.h> + +int +main(void) +{ + if (putenv("FOO=bar") != 0) { + fprintf(stderr, "failed to put FOO into the environment: %s\n", + strerror(errno)); + return (1); + } + + if (getenv("FOO") == NULL) { + fprintf(stderr, "failed to retrieve FOO from the " + "environment!\n"); + return (1); + } + + VERIFY0(unsetenv("FOO")); + + if (getenv("FOO") != NULL) { + fprintf(stderr, "Somehow retrieved FOO from the " + "environment after unsetenv()!\n"); + return (1); + } + + if (putenv("FOO=bar") != 0) { + fprintf(stderr, "failed to put FOO into the environment: %s\n", + strerror(errno)); + return (1); + } + + if (getenv("FOO") == NULL) { + fprintf(stderr, "failed to retrieve FOO from the " + "environment!\n"); + return (1); + } + + VERIFY0(putenv("FOO")); + + if (getenv("FOO") != NULL) { + fprintf(stderr, "Somehow retrieved FOO from the " + "environment after putenv()!\n"); + return (1); + } + + return (0); +} |