Skip to content

Commit 1aaf251

Browse files
committed
Prohibit subpackage traversals
1 parent 3aae024 commit 1aaf251

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

src/test/java/com/google/devtools/build/lib/skyframe/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -1930,6 +1930,7 @@ java_test(
19301930
deps = [
19311931
"//src/main/java/com/google/devtools/build/lib:runtime",
19321932
"//src/main/java/com/google/devtools/build/lib/actions",
1933+
"//src/main/java/com/google/devtools/build/lib/bugreport",
19331934
"//src/main/java/com/google/devtools/build/lib/events",
19341935
"//src/main/java/com/google/devtools/build/lib/vfs",
19351936
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",

src/test/java/com/google/devtools/build/lib/skyframe/SourceDirectoryIntegrationTest.java

+17-13
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.google.common.collect.ImmutableSet;
1919
import com.google.devtools.build.lib.actions.BuildFailedException;
20+
import com.google.devtools.build.lib.bugreport.BugReport;
2021
import com.google.devtools.build.lib.buildtool.util.BuildIntegrationTestCase;
2122
import com.google.devtools.build.lib.events.EventKind;
2223
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -193,16 +194,6 @@ public void emptyDirReplacedWithDifferentSymlink_invalidatesAction() throws Exce
193194
assertInvalidatedByBuild();
194195
}
195196

196-
@Test
197-
public void infiniteSymlinkExpansion() throws Exception {
198-
Path dir = sourceDir.getRelative("subdir/nested2");
199-
dir.delete();
200-
dir.createSymbolicLink(PathFragment.create(".."));
201-
assertThrows(BuildFailedException.class, () -> buildTarget("//foo"));
202-
assertContainsEvent("infinite symlink expansion detected");
203-
assertContainsEvent("foo/dir/subdir/nested2");
204-
}
205-
206197
@Test
207198
@Ignore("TODO(#25834)")
208199
public void danglingSymlinkModified_invalidatesAction() throws Exception {
@@ -212,10 +203,23 @@ public void danglingSymlinkModified_invalidatesAction() throws Exception {
212203
}
213204

214205
@Test
215-
@Ignore("TODO(#25834)")
216-
public void subPackageAdded_invalidatesAction() throws Exception {
206+
public void crossingPackageBoundary_fails() throws Exception {
217207
FileSystemUtils.touchFile(sourceDir.getRelative("subdir/BUILD"));
218-
assertInvalidatedByBuild();
208+
// TODO(#25834): This should not crash Bazel.
209+
assertThrows(IllegalStateException.class, () -> buildTarget("//foo"));
210+
BugReport.getAndResetLastCrashingThrowableIfInTest();
211+
assertContainsEvent(
212+
"Directory artifact foo/dir crosses package boundary into package rooted at foo/dir/subdir");
213+
}
214+
215+
@Test
216+
public void infiniteSymlinkExpansion_fails() throws Exception {
217+
Path dir = sourceDir.getRelative("subdir/nested2");
218+
dir.delete();
219+
dir.createSymbolicLink(PathFragment.create(".."));
220+
assertThrows(BuildFailedException.class, () -> buildTarget("//foo"));
221+
assertContainsEvent("infinite symlink expansion detected");
222+
assertContainsEvent("foo/dir/subdir/nested2");
219223
}
220224

221225
private static final String GENRULE_EVENT = "Executing genrule //foo:foo";

0 commit comments

Comments
 (0)