Skip to content

Commit d55dd62

Browse files
author
Niall Pemberton
committed
Fix for IO-179 StringIndexOutOfBounds exception on FilenameUtils.getPathNoEndSeparator - thanks to Francisco Borges for the patch
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/io/trunk@721610 13f79535-47bb-0310-9956-ffa450edef68
1 parent 0b86b74 commit d55dd62

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

src/java/org/apache/commons/io/FilenameUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,10 +699,11 @@ private static String doGetPath(String filename, int separatorAdd) {
699699
return null;
700700
}
701701
int index = indexOfLastSeparator(filename);
702-
if (prefix >= filename.length() || index < 0) {
702+
int endIndex = index+separatorAdd;
703+
if (prefix >= filename.length() || index < 0 || prefix >= endIndex) {
703704
return "";
704705
}
705-
return filename.substring(prefix, index + separatorAdd);
706+
return filename.substring(prefix, endIndex);
706707
}
707708

708709
/**

src/test/org/apache/commons/io/FilenameUtilsTestCase.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,8 @@ public void testGetPrefix() {
556556
public void testGetPath() {
557557
assertEquals(null, FilenameUtils.getPath(null));
558558
assertEquals("", FilenameUtils.getPath("noseperator.inthispath"));
559+
assertEquals("", FilenameUtils.getPath("/noseperator.inthispath"));
560+
assertEquals("", FilenameUtils.getPath("\\noseperator.inthispath"));
559561
assertEquals("a/b/", FilenameUtils.getPath("a/b/c.txt"));
560562
assertEquals("a/b/", FilenameUtils.getPath("a/b/c"));
561563
assertEquals("a/b/c/", FilenameUtils.getPath("a/b/c/"));
@@ -590,6 +592,8 @@ public void testGetPath() {
590592
public void testGetPathNoEndSeparator() {
591593
assertEquals(null, FilenameUtils.getPath(null));
592594
assertEquals("", FilenameUtils.getPath("noseperator.inthispath"));
595+
assertEquals("", FilenameUtils.getPathNoEndSeparator("/noseperator.inthispath"));
596+
assertEquals("", FilenameUtils.getPathNoEndSeparator("\\noseperator.inthispath"));
593597
assertEquals("a/b", FilenameUtils.getPathNoEndSeparator("a/b/c.txt"));
594598
assertEquals("a/b", FilenameUtils.getPathNoEndSeparator("a/b/c"));
595599
assertEquals("a/b/c", FilenameUtils.getPathNoEndSeparator("a/b/c/"));

0 commit comments

Comments
 (0)