aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-01-29 08:23:47 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-29 08:25:35 -0800
commit45cb2e86d18a6fbb45d3711fa7bd9f8046a15a08 (patch)
treecfd5bb16aa42b2021296b79f31d09362e1baa395 /src/main/java/com/google/devtools/build/lib/analysis
parenta35488e8ee09ca83623422f2dca3f0adc4507155 (diff)
Do not crash when ctx.action.args.add map_fn returns a list of the wrong length.
PiperOrigin-RevId: 183668291
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCustomCommandLine.java10
2 files changed, 12 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index 4bf9999f50..327c73697c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -950,7 +950,8 @@ public class SkylarkActionFactory implements SkylarkValue {
noneable = true,
doc =
"The passed objects are passed through a map function. "
- + "For vector args the function is given a list and is expected to return a list."
+ + "For vector args the function is given a list and is expected to "
+ + "return a list of the same length as the input."
)
},
useLocation = true
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCustomCommandLine.java
index e67ff39f09..c9e5a7ddf9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCustomCommandLine.java
@@ -144,6 +144,16 @@ class SkylarkCustomCommandLine extends CommandLine {
null));
}
List resultAsList = (List) result;
+ if (resultAsList.size() != count) {
+ throw new CommandLineExpansionException(
+ errorMessage(
+ String.format(
+ "map_fn must return a list of the same length as the input. "
+ + "Found list of length %d, expected %d.",
+ resultAsList.size(), count),
+ location,
+ null));
+ }
mutatedValues.clear();
mutatedValues.addAll(resultAsList);
}