Skip to content

Commit

Permalink
Merge pull request #14180 from Bensikrac/master
Browse files Browse the repository at this point in the history
fix: FilesSyncHelper: Shuffle array after null check, else NullPointerException is thrown
  • Loading branch information
tobiasKaminsky authored Jan 3, 2025
2 parents 068e547 + 76b945b commit d8c79db
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ public static void walkFileTreeRandomly(Path start, FileVisitor<? super Path> vi
FileVisitResult preVisitDirectoryResult = visitor.preVisitDirectory(start, (BasicFileAttributes)null);
if (preVisitDirectoryResult == FileVisitResult.CONTINUE) {
File[] children = start.toFile().listFiles();
Collections.shuffle(Arrays.asList(children));
if (children != null) {
Collections.shuffle(Arrays.asList(children));
File[] var5 = children;
int var6 = children.length;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2024 Benedek Major <[email protected]>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

package com.owncloud.android.utils;

import org.junit.BeforeClass;
import org.junit.Test;

import org.lukhnos.nnio.file.FileVisitResult;
import org.lukhnos.nnio.file.Path;
import org.lukhnos.nnio.file.Paths;
import org.lukhnos.nnio.file.SimpleFileVisitor;
import org.lukhnos.nnio.file.attribute.BasicFileAttributes;
import org.mockito.Mock;
import org.mockito.Mockito;


import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;

import static com.owncloud.android.utils.FilesSyncHelper.walkFileTreeRandomly;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;



public class FilesSyncHelperTest {
@Mock
private File mockFile;

@Mock
private Path mockPath;

@Test
public void testWalkFileTreeNullHandling(){
mockFile = mock(File.class);
mockPath = mock(Path.class);
Mockito.when(mockFile.isDirectory()).thenReturn(true);
Mockito.when(mockPath.toFile()).thenReturn(mockFile);
Mockito.when(mockFile.listFiles()).thenReturn(null);
Mockito.when(mockFile.canRead()).thenReturn(true);

SimpleFileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) {
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
return FileVisitResult.CONTINUE;
}
};
try{
walkFileTreeRandomly(mockPath,visitor);
} catch (Exception e){
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter( writer );
e.printStackTrace( printWriter );
printWriter.flush();

String stackTrace = writer.toString();
fail("walkFileTree throws an exception: \n" + stackTrace);
}
}

}

0 comments on commit d8c79db

Please sign in to comment.