Skip to content

Commit 488472d

Browse files
author
Jethro Beekman
committed
Don't silently ignore invalid data in target spec
1 parent e5f6498 commit 488472d

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/librustc_target/spec/mod.rs

+15-11
Original file line numberDiff line numberDiff line change
@@ -861,23 +861,27 @@ impl Target {
861861
} );
862862
($key_name:ident, link_args) => ( {
863863
let name = (stringify!($key_name)).replace("_", "-");
864-
if let Some(obj) = obj.find(&name[..]).and_then(|o| o.as_object()) {
864+
if let Some(val) = obj.find(&name[..]) {
865+
let obj = val.as_object().ok_or_else(|| format!("{}: expected a \
866+
JSON object with fields per linker-flavor.", name))?;
865867
let mut args = LinkArgs::new();
866868
for (k, v) in obj {
867-
let k = LinkerFlavor::from_str(&k).ok_or_else(|| {
869+
let flavor = LinkerFlavor::from_str(&k).ok_or_else(|| {
868870
format!("{}: '{}' is not a valid value for linker-flavor. \
869871
Use 'em', 'gcc', 'ld' or 'msvc'", name, k)
870872
})?;
871873

872-
let v = v.as_array().map(|a| {
873-
a
874-
.iter()
875-
.filter_map(|o| o.as_string())
876-
.map(|s| s.to_owned())
877-
.collect::<Vec<_>>()
878-
}).unwrap_or(vec![]);
879-
880-
args.insert(k, v);
874+
let v = v.as_array().ok_or_else(||
875+
format!("{}.{}: expected a JSON array", name, k)
876+
)?.iter().enumerate()
877+
.map(|(i,s)| {
878+
let s = s.as_string().ok_or_else(||
879+
format!("{}.{}[{}]: expected a JSON string", name, k, i))?;
880+
Ok(s.to_owned())
881+
})
882+
.collect::<Result<Vec<_>, String>>()?;
883+
884+
args.insert(flavor, v);
881885
}
882886
base.options.$key_name = args;
883887
}

src/test/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"pre-link-args": ["-m64"],
2+
"pre-link-args": {"gcc": ["-m64"]},
33
"data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
44
"linker-flavor": "gcc",
55
"llvm-target": "x86_64-unknown-linux-gnu",

0 commit comments

Comments
 (0)