diff options
Diffstat (limited to 'runtime/ops')
-rw-r--r-- | runtime/ops/os.rs | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/runtime/ops/os.rs b/runtime/ops/os.rs index 21a94b0fb..70d429839 100644 --- a/runtime/ops/os.rs +++ b/runtime/ops/os.rs @@ -80,10 +80,20 @@ fn op_set_env( value: String, ) -> Result<(), AnyError> { state.borrow_mut::<Permissions>().env.check(&key)?; - let invalid_key = key.is_empty() || key.contains(&['=', '\0'] as &[char]); - let invalid_value = value.contains('\0'); - if invalid_key || invalid_value { - return Err(type_error("Key or value contains invalid characters.")); + if key.is_empty() { + return Err(type_error("Key is an empty string.")); + } + if key.contains(&['=', '\0'] as &[char]) { + return Err(type_error(format!( + "Key contains invalid characters: {:?}", + key + ))); + } + if value.contains('\0') { + return Err(type_error(format!( + "Value contains invalid characters: {:?}", + value + ))); } env::set_var(key, value); Ok(()) @@ -108,9 +118,17 @@ fn op_get_env( state.borrow_mut::<Permissions>().env.check(&key)?; } - if key.is_empty() || key.contains(&['=', '\0'] as &[char]) { - return Err(type_error("Key contains invalid characters.")); + if key.is_empty() { + return Err(type_error("Key is an empty string.")); } + + if key.contains(&['=', '\0'] as &[char]) { + return Err(type_error(format!( + "Key contains invalid characters: {:?}", + key + ))); + } + let r = match env::var(key) { Err(env::VarError::NotPresent) => None, v => Some(v?), |