diff --git a/helpers.build.psm1 b/helpers.build.psm1 index c129322ce..23f16aab4 100644 --- a/helpers.build.psm1 +++ b/helpers.build.psm1 @@ -388,9 +388,6 @@ function Get-RustUp { Write-Verbose -Verbose "Using msrustup" $rustup = 'msrustup' $channel = 'ms-prod-1.95' - if ($architecture -eq 'current') { - $env:MSRUSTUP_TOOLCHAIN = "$architecture" - } } elseif ($null -ne (Get-Command rustup -CommandType Application -ErrorAction Ignore)) { $rustup = 'rustup' $env:TESTING_FUNCTION_ENV = "lolwhat" diff --git a/lib/dsc-lib-registry/src/lib.rs b/lib/dsc-lib-registry/src/lib.rs index 3cd677c72..ff786271b 100644 --- a/lib/dsc-lib-registry/src/lib.rs +++ b/lib/dsc-lib-registry/src/lib.rs @@ -745,7 +745,7 @@ fn convert_value_data_to_offline(value_data: &RegistryValueData) -> Result<(u32, /// Decode a null-terminated UTF-16LE byte slice to a String. fn decode_utf16_bytes(data: &[u8]) -> String { - let u16_slice: Vec = data.chunks_exact(2) + let u16_slice: Vec = data.as_chunks::<2>().0.iter() .map(|chunk| u16::from_le_bytes([chunk[0], chunk[1]])) .collect(); // Strip trailing null @@ -761,7 +761,7 @@ fn encode_utf16_bytes(s: &str) -> Vec { /// Decode REG_MULTI_SZ: double-null-terminated list of null-terminated UTF-16LE strings. fn decode_multi_sz(data: &[u8]) -> Vec { - let u16_slice: Vec = data.chunks_exact(2) + let u16_slice: Vec = data.as_chunks::<2>().0.iter() .map(|chunk| u16::from_le_bytes([chunk[0], chunk[1]])) .collect(); let mut strings = Vec::new(); @@ -789,6 +789,17 @@ fn encode_multi_sz(strings: &[String]) -> Vec { result.iter().flat_map(|&c| c.to_le_bytes()).collect() } +#[test] +fn decode_utf16_bytes_ignores_incomplete_code_unit() { + assert_eq!(decode_utf16_bytes(&[b'A', 0, 0xff]), "A"); +} + +#[test] +fn decode_multi_sz_ignores_incomplete_code_unit() { + let data = [b'A', 0, 0, 0, 0, 0, 0xff]; + assert_eq!(decode_multi_sz(&data), vec!["A"]); +} + #[test] fn get_hklm_key() { let reg_helper = RegistryHelper::new_from_json(r#"{"keyPath":"HKEY_LOCAL_MACHINE"}"#).unwrap(); diff --git a/lib/dsc-lib/src/functions/int.rs b/lib/dsc-lib/src/functions/int.rs index 5297e3aae..c4f81bc25 100644 --- a/lib/dsc-lib/src/functions/int.rs +++ b/lib/dsc-lib/src/functions/int.rs @@ -30,16 +30,15 @@ impl Function for Int { fn invoke(&self, args: &[Value], _context: &Context) -> Result { let arg = &args[0]; - let value: i64; - if arg.is_string() { + let value: i64 = if arg.is_string() { let input = arg.as_str().ok_or(DscError::FunctionArg("int".to_string(), t!("functions.int.invalidInput").to_string()))?; let result = input.parse::().map_err(|_| DscError::FunctionArg("int".to_string(), t!("functions.int.parseStringError").to_string()))?; - value = NumCast::from(result).ok_or(DscError::FunctionArg("int".to_string(), t!("functions.int.castError").to_string()))?; + NumCast::from(result).ok_or(DscError::FunctionArg("int".to_string(), t!("functions.int.castError").to_string()))? } else if arg.is_number() { - value = arg.as_i64().ok_or(DscError::FunctionArg("int".to_string(), t!("functions.int.parseNumError").to_string()))?; + arg.as_i64().ok_or(DscError::FunctionArg("int".to_string(), t!("functions.int.parseNumError").to_string()))? } else { return Err(DscError::FunctionArg("int".to_string(), t!("functions.invalidArgType").to_string())); - } + }; Ok(Value::Number(value.into())) } }