Explorar el Código

fix #2622 check if url starts with http on filename extraction

Shinsuke Sugaya hace 3 años
padre
commit
4f541e5b1f

+ 10 - 7
src/main/java/org/codelibs/fess/crawler/transformer/FessTransformer.java

@@ -175,15 +175,18 @@ public interface FessTransformer {
             return StringUtil.EMPTY;
         }
 
+        int idx = 0;
         String u = url;
-        int idx = u.lastIndexOf('?');
-        if (idx >= 0) {
-            u = u.substring(0, idx);
-        }
+        if (u.startsWith("https:") || u.startsWith("http:")) {
+            idx = u.lastIndexOf('?');
+            if (idx >= 0) {
+                u = u.substring(0, idx);
+            }
 
-        idx = u.lastIndexOf('#');
-        if (idx >= 0) {
-            u = u.substring(0, idx);
+            idx = u.lastIndexOf('#');
+            if (idx >= 0) {
+                u = u.substring(0, idx);
+            }
         }
         u = decodeUrlAsName(u, u.startsWith("file:"));
         idx = u.lastIndexOf('/');

+ 9 - 1
src/test/java/org/codelibs/fess/crawler/transformer/FessFileTransformerTest.java

@@ -69,7 +69,7 @@ public class FessFileTransformerTest extends UnitFessTestCase {
         String url, exp;
         final FessFileTransformer transformer = createInstance();
 
-        url = "http://example.com/" + encodeUrl("#") + "/@@bar/index.html#fragment?foo=bar";
+        url = "https://example.com/" + encodeUrl("#") + "/@@bar/index.html#fragment?foo=bar";
         exp = "index.html";
         assertEquals(exp, transformer.getFileName(url, Constants.UTF_8));
 
@@ -84,6 +84,14 @@ public class FessFileTransformerTest extends UnitFessTestCase {
         url = "file://example.com/test%20+%2B.txt";
         exp = "test ++.txt";
         assertEquals(exp, transformer.getFileName(url, Constants.UTF_8));
+
+        url = "file://example.com/test#.txt";
+        exp = "test#.txt";
+        assertEquals(exp, transformer.getFileName(url, Constants.UTF_8));
+
+        url = "smb://example.com/test?.txt";
+        exp = "test?.txt";
+        assertEquals(exp, transformer.getFileName(url, Constants.UTF_8));
     }
 
     public void test_decodeUrl_null() throws Exception {