# HG changeset patch # User Raphaël Gomès # Date 1630510825 -7200 # Node ID 1e00834491a563ac0886e65c291ce52cb054fcd6 # Parent d919b0ca8449367977e40fd6202fb500486e83f7 rhg-cat: fallback when detecting `.` or `..` path segments We do not normalize paths correctly yet, so exclude the shortcuts. Differential Revision: https://phab.mercurial-scm.org/D11378 diff -r d919b0ca8449 -r 1e00834491a5 rust/rhg/src/commands/cat.rs --- a/rust/rhg/src/commands/cat.rs Wed Sep 01 16:13:25 2021 +0200 +++ b/rust/rhg/src/commands/cat.rs Wed Sep 01 17:40:25 2021 +0200 @@ -46,8 +46,13 @@ let mut files = vec![]; for file in file_args.iter() { + let normalized = cwd.join(&file); // TODO: actually normalize `..` path segments etc? - let normalized = cwd.join(&file); + let dotted = normalized.components().any(|c| c.as_os_str() == ".."); + if file == &"." || dotted { + let message = "`..` or `.` path segment"; + return Err(CommandError::unsupported(message)); + } let stripped = normalized .strip_prefix(&working_directory) // TODO: error message for path arguments outside of the repo diff -r d919b0ca8449 -r 1e00834491a5 tests/test-rhg.t --- a/tests/test-rhg.t Wed Sep 01 16:13:25 2021 +0200 +++ b/tests/test-rhg.t Wed Sep 01 17:40:25 2021 +0200 @@ -199,6 +199,17 @@ [252] +Fallback with shell path segments + $ $NO_FALLBACK rhg cat . + unsupported feature: `..` or `.` path segment + [252] + $ $NO_FALLBACK rhg cat .. + unsupported feature: `..` or `.` path segment + [252] + $ $NO_FALLBACK rhg cat ../.. + unsupported feature: `..` or `.` path segment + [252] + Requirements $ $NO_FALLBACK rhg debugrequirements dotencode