Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

path: fix bugs related to paths with trailing slashes

  • Loading branch information...
commit b24e65fa9aa870d9d1e95d54b24c594eb423f372 1 parent e6acfed
@AndreasMadsen authored
Showing with 18 additions and 1 deletion.
  1. +10 −0 lib/path.js
  2. +8 −1 test/simple/test-path.js
View
10 lib/path.js
@@ -290,7 +290,17 @@ if (isWindows) {
// 'root' is just a slash, or nothing.
var splitPathRe =
/^(\/?)([\s\S]+\/(?!$)|\/)?((?:\.{1,2}$|[\s\S]+?)?(\.[^.\/]*)?)$/;
+ var trailingSlash = /\/+$/;
var splitPath = function(filename) {
+
+ // removes trailing slashes before spliting the path
+ var tail = trailingSlash.exec(filename);
+ if (tail) {
+ if (tail.index === 0) return ['/', '', '', ''];
+
+ filename = filename.slice(0, tail.index);
+ }
+
var result = splitPathRe.exec(filename);
return [result[1] || '', result[2] || '', result[3] || '', result[4] || ''];
};
View
9 test/simple/test-path.js
@@ -30,6 +30,11 @@ var f = __filename;
assert.equal(path.basename(f), 'test-path.js');
assert.equal(path.basename(f, '.js'), 'test-path');
+assert.equal(path.basename('/dir/basename.ext'), 'basename.ext');
+assert.equal(path.basename('/basename.ext'), 'basename.ext');
+assert.equal(path.basename('basename.ext'), 'basename.ext');
+assert.equal(path.basename('basename.ext/'), 'basename.ext');
+assert.equal(path.basename('basename.ext//'), 'basename.ext');
// POSIX filenames may include control characters
// c.f. http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html
@@ -47,6 +52,7 @@ assert.equal(path.dirname('/a/b/'), '/a');
assert.equal(path.dirname('/a/b'), '/a');
assert.equal(path.dirname('/a'), '/');
assert.equal(path.dirname('/'), '/');
+assert.equal(path.dirname('////'), '/');
if (isWindows) {
assert.equal(path.dirname('c:\\'), 'c:\\');
@@ -114,7 +120,8 @@ assert.equal(path.extname('..file..'), '.');
assert.equal(path.extname('...'), '.');
assert.equal(path.extname('...ext'), '.ext');
assert.equal(path.extname('....'), '.');
-assert.equal(path.extname('file.ext/'), '');
+assert.equal(path.extname('file.ext/'), '.ext');
+assert.equal(path.extname('file.ext//'), '.ext');
if (isWindows) {
// On windows, backspace is a path separator.
Please sign in to comment.
Something went wrong with that request. Please try again.