bazel icon indicating copy to clipboard operation
bazel copied to clipboard

Server crash when derived artifact in top-level package contains uplevel references

Open lberki opened this issue 1 year ago • 0 comments

Description of the bug:

Bazel crashes when one creates an artifact whose package-relative path contains .. in a rule whose package name is the empty string. The crash looks like this:

java.lang.RuntimeException: Unrecoverable error while evaluating node 'ConfiguredTargetKey{label=//:r, config=BuildConfigurationKey[f7b2890b4594e3d56423e2023135c0b84144d7515065abc76a75c81eeaac03f2]}' (requested by nodes 'ConfiguredTargetKey{label=//:r, config=BuildConfigurationKey[7d2b06aa3efa83a79f5d93af1e6af0dcb93e0bd2f5732e781f51429ef4ccded7]}')
        at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:557)
        at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:426)
        at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: net.starlark.java.eval.Starlark$UncheckedEvalException: IllegalArgumentException thrown during Starlark evaluation (//:r)
        at <starlark>.declare_file(<builtin>:0)
        at <starlark>._r_impl(/usr/local/google/home/lberki/bazel/t/r.bzl:2)
Caused by: java.lang.IllegalArgumentException: ../f
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143)
        at com.google.devtools.build.lib.actions.ArtifactFactory.validatePath(ArtifactFactory.java:186)
        at com.google.devtools.build.lib.actions.ArtifactFactory.getDerivedArtifact(ArtifactFactory.java:228)
        at com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment.getDerivedArtifact(CachingAnalysisEnvironment.java:282)
        at com.google.devtools.build.lib.analysis.RuleContext.getDerivedArtifact(RuleContext.java:789)
        at com.google.devtools.build.lib.analysis.RuleContext.getDerivedArtifact(RuleContext.java:773)
        at com.google.devtools.build.lib.analysis.starlark.StarlarkActionFactory.declareFile(StarlarkActionFactory.java:160)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at net.starlark.java.eval.MethodDescriptor.call(MethodDescriptor.java:178)
        at net.starlark.java.eval.BuiltinFunction.fastcall(BuiltinFunction.java:78)
        at net.starlark.java.eval.Starlark.fastcall(Starlark.java:807)
        at net.starlark.java.eval.Eval.evalCall(Eval.java:699)
        at net.starlark.java.eval.Eval.eval(Eval.java:514)
        at net.starlark.java.eval.Eval.execAssignment(Eval.java:121)
        at net.starlark.java.eval.Eval.exec(Eval.java:285)
        at net.starlark.java.eval.Eval.execStatements(Eval.java:82)
        at net.starlark.java.eval.Eval.execFunctionBody(Eval.java:66)
        at net.starlark.java.eval.StarlarkFunction.fastcall(StarlarkFunction.java:186)
        at net.starlark.java.eval.Starlark.fastcall(Starlark.java:807)
        at com.google.devtools.build.lib.analysis.starlark.StarlarkRuleConfiguredTargetUtil.evalRule(StarlarkRuleConfiguredTargetUtil.java:100)
        at com.google.devtools.build.lib.analysis.ConfiguredTargetFactory.createRule(ConfiguredTargetFactory.java:387)
        at com.google.devtools.build.lib.analysis.ConfiguredTargetFactory.createConfiguredTarget(ConfiguredTargetFactory.java:203)
        at com.google.devtools.build.lib.skyframe.SkyframeBuildView.createConfiguredTarget(SkyframeBuildView.java:1352)
        at com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.createConfiguredTarget(ConfiguredTargetFunction.java:389)
        at com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.compute(ConfiguredTargetFunction.java:313)
        at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:468)
        at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:426)
        at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Which category does this issue belong to?

Core

What's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.

cat > BUILD <<'EOF'
load("r.bzl", "r")

r(name = "r")
EOF

cat > r.bzl <<'EOF'
def _r_impl(ctx):
    f = ctx.actions.declare_file("../f")
    ctx.actions.write(f, "foo")
    return [DefaultInfo()]

r = rule(
    implementation = _r_impl,
)
EOF

touch MODULE.bazel

bazel build --nobuild //:r

Which operating system are you running Bazel on?

Linux

What is the output of bazel info release?

development version

If bazel info release returns development version or (@non-git), tell us how you built Bazel.

No response

What's the output of git remote get-url origin; git rev-parse HEAD ?

`bc16c579a155bec5289d9b929494d21a38212296`

Is this a regression? If yes, please try to identify the Bazel commit where the bug was introduced.

No response

Have you found anything relevant by searching the web?

No response

Any other information, logs, or outputs that you want to share?

No response

lberki avatar May 14 '24 10:05 lberki