]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11077 ignore size of symlinks in FileUtils2#sizeOf()
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Sun, 5 Aug 2018 21:02:28 +0000 (23:02 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 7 Aug 2018 18:21:21 +0000 (20:21 +0200)
server/sonar-process/src/main/java/org/sonar/process/FileUtils2.java
server/sonar-process/src/test/java/org/sonar/process/FileUtils2Test.java

index d275c960fa966b4e3f9268bb87ddc8f06d106b3e..779b48d0bbf5efae4eb407a0175c55f5b0234665 100644 (file)
@@ -199,7 +199,11 @@ public final class FileUtils2 {
 
     @Override
     public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
-      size += attrs.size();
+      // size is specified on regular files only
+      // https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/BasicFileAttributes.html#size--
+      if (attrs.isRegularFile()) {
+        size += attrs.size();
+      }
       return FileVisitResult.CONTINUE;
     }
   }
index 890a21d782a566457b598c3d41a0283022027136..2c7b9af08453e734e5b5ea98808f0b3dc382dd95 100644 (file)
@@ -281,6 +281,21 @@ public class FileUtils2Test {
     FileUtils2.sizeOf(path);
   }
 
+  @Test
+  public void sizeOf_ignores_size_of_non_regular_files() throws IOException {
+    File outside = temporaryFolder.newFile();
+    FileUtils.write(outside, "outside!!!", UTF_8);
+    File dir = temporaryFolder.newFolder();
+    File child = new File(dir, "child1.txt");
+    FileUtils.write(child, "inside!!!", UTF_8);
+    File symlink = new File(dir, "child2.txt");
+    Files.createSymbolicLink(symlink.toPath(), outside.toPath());
+
+    assertThat(FileUtils2.sizeOf(dir.toPath()))
+      .isPositive()
+      .isEqualTo(FileUtils2.sizeOf(child.toPath()));
+  }
+
   private void expectDirectoryCanNotBeNullNPE() {
     expectedException.expect(NullPointerException.class);
     expectedException.expectMessage("Directory can not be null");