Return error early if seconds part of timestamp is invalid (#6193)

Signed-off-by: nibon7 <nibon7@163.com>
This commit is contained in:
nibon7 2022-07-31 20:32:16 +08:00 committed by GitHub
parent dd2a0e35f4
commit 26caf7e1b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 93 additions and 1 deletions

View File

@ -121,7 +121,15 @@ impl Command for Touch {
// Checks for the seconds stamp and removes the '.' delimiter if any // Checks for the seconds stamp and removes the '.' delimiter if any
let (val, has_sec): (String, bool) = match stamp.split_once('.') { let (val, has_sec): (String, bool) = match stamp.split_once('.') {
Some((dtime, sec)) => (format!("{}{}", dtime, sec), true), Some((dtime, sec)) => match sec.parse::<u8>() {
Ok(sec) if sec < 60 => (format!("{}{}", dtime, sec), true),
_ => {
return Err(ShellError::UnsupportedInput(
"input has an invalid timestamp".to_string(),
span,
))
}
},
None => (stamp.to_string(), false), None => (stamp.to_string(), false),
}; };

View File

@ -180,6 +180,34 @@ fn errors_if_change_modified_time_of_file_with_invalid_timestamp() {
); );
assert!(outcome.err.contains("input has an invalid timestamp")); assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -t 082412.3012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -t 0824.123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -t 08.24123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -t 0.824123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
}) })
} }
@ -401,6 +429,34 @@ fn errors_if_change_access_time_of_file_with_invalid_timestamp() {
); );
assert!(outcome.err.contains("input has an invalid timestamp")); assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -a -t 082412.3012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -a -t 0824.123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -a -t 08.24123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -a -t 0.824123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
}) })
} }
@ -634,6 +690,34 @@ fn errors_if_change_modified_and_access_time_of_file_with_invalid_timestamp() {
); );
assert!(outcome.err.contains("input has an invalid timestamp")); assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -a -t 082412.3012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -a -t 0824.123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -a -t 08.24123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
outcome = nu!(
cwd: dirs.test(),
"touch -m -a -t 0.824123012 file.txt"
);
assert!(outcome.err.contains("input has an invalid timestamp"));
}) })
} }