diff --git a/lucene/common-build.xml b/lucene/common-build.xml
index 5f0353fa284..c76dd545168 100644
--- a/lucene/common-build.xml
+++ b/lucene/common-build.xml
@@ -1094,7 +1094,6 @@
-
diff --git a/lucene/tools/junit4/solr-tests.policy b/lucene/tools/junit4/solr-tests.policy
index 88beda03dbd..7de5660027f 100644
--- a/lucene/tools/junit4/solr-tests.policy
+++ b/lucene/tools/junit4/solr-tests.policy
@@ -21,7 +21,7 @@ grant {
// contain read access to only what we need:
// 3rd party jar resources (where symlinks are not supported), test-files/ resources
permission java.io.FilePermission "${common.dir}${/}-", "read";
- permission java.io.FilePermission "${common-solr.dir}${/}-", "read";
+ permission java.io.FilePermission "${common.dir}${/}..${/}solr${/}-", "read";
// 3rd party jar resources (where symlinks are supported)
permission java.io.FilePermission "${user.home}${/}.ivy2${/}cache${/}-", "read";
// system jar resources
diff --git a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
index 590ec4a990f..54ec6b2999e 100644
--- a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
+++ b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
@@ -42,6 +42,7 @@ import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.nio.file.InvalidPathException;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -434,6 +435,15 @@ public class SimplePostTool {
"The web mode is a simple crawler following links within domain, default delay=10s.");
}
+ private boolean checkIsValidPath(File srcFile) {
+ try {
+ srcFile.toPath();
+ return true;
+ } catch (InvalidPathException e) {
+ return false;
+ }
+ }
+
/** Post all filenames provided in args
* @param args array of file names
* @param startIndexInArgs offset to start
@@ -446,21 +456,13 @@ public class SimplePostTool {
int filesPosted = 0;
for (int j = startIndexInArgs; j < args.length; j++) {
File srcFile = new File(args[j]);
- if(srcFile.isDirectory() && srcFile.canRead()) {
+ boolean isValidPath = checkIsValidPath(srcFile);
+ if(isValidPath && srcFile.isDirectory() && srcFile.canRead()) {
filesPosted += postDirectory(srcFile, out, type);
- } else if (srcFile.isFile() && srcFile.canRead()) {
+ } else if (isValidPath && srcFile.isFile() && srcFile.canRead()) {
filesPosted += postFiles(new File[] {srcFile}, out, type);
} else {
- File parent = srcFile.getParentFile();
- if(parent == null) parent = new File(".");
- String fileGlob = srcFile.getName();
- GlobFileFilter ff = new GlobFileFilter(fileGlob, false);
- File[] files = parent.listFiles(ff);
- if(files == null || files.length == 0) {
- warn("No files or directories matching "+srcFile);
- continue;
- }
- filesPosted += postFiles(parent.listFiles(ff), out, type);
+ filesPosted += handleGlob(srcFile, out, type);
}
}
return filesPosted;
@@ -477,21 +479,13 @@ public class SimplePostTool {
reset();
int filesPosted = 0;
for (File srcFile : files) {
- if(srcFile.isDirectory() && srcFile.canRead()) {
+ boolean isValidPath = checkIsValidPath(srcFile);
+ if(isValidPath && srcFile.isDirectory() && srcFile.canRead()) {
filesPosted += postDirectory(srcFile, out, type);
- } else if (srcFile.isFile() && srcFile.canRead()) {
+ } else if (isValidPath && srcFile.isFile() && srcFile.canRead()) {
filesPosted += postFiles(new File[] {srcFile}, out, type);
} else {
- File parent = srcFile.getParentFile();
- if(parent == null) parent = new File(".");
- String fileGlob = srcFile.getName();
- GlobFileFilter ff = new GlobFileFilter(fileGlob, false);
- File[] fileList = parent.listFiles(ff);
- if(fileList == null || fileList.length == 0) {
- warn("No files or directories matching "+srcFile);
- continue;
- }
- filesPosted += postFiles(fileList, out, type);
+ filesPosted += handleGlob(srcFile, out, type);
}
}
return filesPosted;
@@ -539,6 +533,28 @@ public class SimplePostTool {
return filesPosted;
}
+ /**
+ * This only handles file globs not full path globbing.
+ * @param globFile file holding glob path
+ * @param out outputStream to write results to
+ * @param type default content-type to use when posting (may be overridden in auto mode)
+ * @return number of files posted
+ */
+ int handleGlob(File globFile, OutputStream out, String type) {
+ int filesPosted = 0;
+ File parent = globFile.getParentFile();
+ if (parent == null) parent = new File(".");
+ String fileGlob = globFile.getName();
+ GlobFileFilter ff = new GlobFileFilter(fileGlob, false);
+ File[] fileList = parent.listFiles(ff);
+ if (fileList == null || fileList.length == 0) {
+ warn("No files or directories matching " + globFile);
+ } else {
+ filesPosted = postFiles(fileList, out, type);
+ }
+ return filesPosted;
+ }
+
/**
* This method takes as input a list of start URL strings for crawling,
* adds each one to a backlog and then starts crawling