mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
mktemp: error on path separator in template prefix
Correct the error that arises from a path separator in the prefix portion of a template argument provided to `mktemp`. Before this commit, the error message was incorrect: $ mktemp -t a/bXXX mktemp: failed to create file via template 'a/bXXX': No such file or directory (os error 2) at path "/tmp/a/bege" After this commit, the error message is correct: $ mktemp -t a/bXXX mktemp: invalid template, 'a/bXXX', contains directory separator The code was failing to check for a path separator in the prefix portion of the template.
This commit is contained in:
parent
0ebd9c9391
commit
2874f18950
2 changed files with 34 additions and 8 deletions
|
@ -41,7 +41,12 @@ enum MkTempError {
|
||||||
PersistError(PathBuf),
|
PersistError(PathBuf),
|
||||||
MustEndInX(String),
|
MustEndInX(String),
|
||||||
TooFewXs(String),
|
TooFewXs(String),
|
||||||
ContainsDirSeparator(String),
|
|
||||||
|
/// The template prefix contains a path separator (e.g. `"a/bXXX"`).
|
||||||
|
PrefixContainsDirSeparator(String),
|
||||||
|
|
||||||
|
/// The template suffix contains a path separator (e.g. `"XXXa/b"`).
|
||||||
|
SuffixContainsDirSeparator(String),
|
||||||
InvalidTemplate(String),
|
InvalidTemplate(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +61,14 @@ impl Display for MkTempError {
|
||||||
PersistError(p) => write!(f, "could not persist file {}", p.quote()),
|
PersistError(p) => write!(f, "could not persist file {}", p.quote()),
|
||||||
MustEndInX(s) => write!(f, "with --suffix, template {} must end in X", s.quote()),
|
MustEndInX(s) => write!(f, "with --suffix, template {} must end in X", s.quote()),
|
||||||
TooFewXs(s) => write!(f, "too few X's in template {}", s.quote()),
|
TooFewXs(s) => write!(f, "too few X's in template {}", s.quote()),
|
||||||
ContainsDirSeparator(s) => {
|
PrefixContainsDirSeparator(s) => {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"invalid template, {}, contains directory separator",
|
||||||
|
s.quote()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
SuffixContainsDirSeparator(s) => {
|
||||||
write!(
|
write!(
|
||||||
f,
|
f,
|
||||||
"invalid suffix {}, contains directory separator",
|
"invalid suffix {}, contains directory separator",
|
||||||
|
@ -252,8 +264,12 @@ fn parse_template<'a>(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if prefix.chars().any(is_separator) {
|
||||||
|
return Err(MkTempError::PrefixContainsDirSeparator(temp.into()));
|
||||||
|
}
|
||||||
|
|
||||||
if suf.chars().any(is_separator) {
|
if suf.chars().any(is_separator) {
|
||||||
return Err(MkTempError::ContainsDirSeparator(suf.into()));
|
return Err(MkTempError::SuffixContainsDirSeparator(suf.into()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok((prefix, rand, suf))
|
Ok((prefix, rand, suf))
|
||||||
|
@ -352,11 +368,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_template_errors() {
|
fn test_parse_template_errors() {
|
||||||
// TODO This should be an error as well, but we are not
|
assert!(parse_template("a/bXXX", None).is_err());
|
||||||
// catching it just yet. A future commit will correct this.
|
|
||||||
//
|
|
||||||
// assert!(parse_template("a/bXXX", None).is_err());
|
|
||||||
//
|
|
||||||
assert!(parse_template("XXXa/b", None).is_err());
|
assert!(parse_template("XXXa/b", None).is_err());
|
||||||
assert!(parse_template("XX", None).is_err());
|
assert!(parse_template("XX", None).is_err());
|
||||||
assert!(parse_template("XXXabc", Some("def")).is_err());
|
assert!(parse_template("XXXabc", Some("def")).is_err());
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
use crate::common::util::*;
|
use crate::common::util::*;
|
||||||
|
|
||||||
|
use uucore::display::Quotable;
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tempfile::tempdir;
|
use tempfile::tempdir;
|
||||||
|
|
||||||
|
@ -482,3 +484,15 @@ fn test_respect_template_directory() {
|
||||||
assert_matches_template!(template, filename);
|
assert_matches_template!(template, filename);
|
||||||
assert!(at.file_exists(filename));
|
assert!(at.file_exists(filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Test that a template with a path separator is invalid.
|
||||||
|
#[test]
|
||||||
|
fn test_template_path_separator() {
|
||||||
|
new_ucmd!()
|
||||||
|
.args(&["-t", "a/bXXX"])
|
||||||
|
.fails()
|
||||||
|
.stderr_only(format!(
|
||||||
|
"mktemp: invalid template, {}, contains directory separator\n",
|
||||||
|
"a/bXXX".quote()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue