From c9aca0232064ab3f67eec4ceda3258caa3866129 Mon Sep 17 00:00:00 2001 From: BurntPizza Date: Wed, 8 Aug 2018 18:23:52 -0400 Subject: [PATCH] Don't panic on std::env::vars() when env in null. Fixes #53200 --- src/libstd/sys/unix/os.rs | 6 +----- src/test/run-pass/env-null-vars.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 src/test/run-pass/env-null-vars.rs diff --git a/src/libstd/sys/unix/os.rs b/src/libstd/sys/unix/os.rs index 08c3e15497843..f8f0bbd5bc250 100644 --- a/src/libstd/sys/unix/os.rs +++ b/src/libstd/sys/unix/os.rs @@ -414,12 +414,8 @@ pub fn env() -> Env { unsafe { let _guard = ENV_LOCK.lock(); let mut environ = *environ(); - if environ == ptr::null() { - panic!("os::env() failure getting env string from OS: {}", - io::Error::last_os_error()); - } let mut result = Vec::new(); - while *environ != ptr::null() { + while environ != ptr::null() && *environ != ptr::null() { if let Some(key_value) = parse(CStr::from_ptr(*environ).to_bytes()) { result.push(key_value); } diff --git a/src/test/run-pass/env-null-vars.rs b/src/test/run-pass/env-null-vars.rs new file mode 100644 index 0000000000000..296764269dec0 --- /dev/null +++ b/src/test/run-pass/env-null-vars.rs @@ -0,0 +1,29 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-windows +// ignore-wasm32-bare no libc to test ffi with + +// issue-53200 + +#![feature(libc)] +extern crate libc; + +use std::env; + +// FIXME: more platforms? +#[cfg(target_os = "linux")] +fn main() { + unsafe { libc::clearenv(); } + assert_eq!(env::vars().count(), 0); +} + +#[cfg(not(target_os = "linux"))] +fn main() {}