From 602238b6a82263bf5360302560eb764353a92634 Mon Sep 17 00:00:00 2001 From: Gudge Date: Mon, 5 Oct 2026 06:48:43 -0700 Subject: [PATCH] Fix ProcessContainer environment block sort lint This PR replaces the redundant environment-block sort comparator with sort_by_key while preserving case-insensitive key ordering and stable handling of equal keys. Details * Use sort_by_key for the existing uppercase environment-variable key. * Test that keys differing only by case retain their original order. Tests * cargo fmt --manifest-path .\src\Cargo.toml --all -- --check: passed. * cargo test --manifest-path .\src\Cargo.toml -p process_container_common --quiet: passed (318 tests; 1 ignored). * cargo clippy --manifest-path .\src\Cargo.toml --workspace --all-targets -- -D warnings: passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ff6d3538-5272-492f-aba0-5f7ef9feda2f Generated-with: gpt-6-sol --- .../common/appcontainer_runner.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mxc-sdk/src/backends/process_container/common/appcontainer_runner.rs b/src/mxc-sdk/src/backends/process_container/common/appcontainer_runner.rs index d3eabc205..a3cff3cac 100644 --- a/src/mxc-sdk/src/backends/process_container/common/appcontainer_runner.rs +++ b/src/mxc-sdk/src/backends/process_container/common/appcontainer_runner.rs @@ -118,7 +118,7 @@ fn create_process_failure( /// Entries are sorted case-insensitively by key as required by `CreateProcessW`. pub(crate) fn encode_env_block(entries: &[(String, String)]) -> Vec { let mut sorted: Vec<&(String, String)> = entries.iter().collect(); - sorted.sort_by(|(a, _), (b, _)| a.to_ascii_uppercase().cmp(&b.to_ascii_uppercase())); + sorted.sort_by_key(|(key, _)| key.to_ascii_uppercase()); let mut block = Vec::new(); for (key, value) in sorted { @@ -2595,6 +2595,18 @@ mod tests { assert_eq!(parsed[1].0, "Zebra"); } + #[test] + fn encode_env_block_preserves_order_for_case_insensitive_equal_keys() { + let entries = vec![ + ("Alpha".to_string(), "first".to_string()), + ("alpha".to_string(), "second".to_string()), + ("Beta".to_string(), "third".to_string()), + ]; + let block = super::encode_env_block(&entries); + let parsed = super::parse_environment_block(block.as_ptr()); + assert_eq!(parsed, entries); + } + #[test] fn encode_env_block_empty_input_is_double_null_terminated() { assert_eq!(super::encode_env_block(&[]), vec![0u16, 0u16]);