Merge pull request #17599 from owncloud/fix-joinpaths-trailingslash

Fix OC.joinPaths with empty arguments
This commit is contained in:
Morris Jobke 2015-07-13 17:25:27 +02:00
commit e18d0e26f6
2 changed files with 18 additions and 4 deletions

View File

@ -385,13 +385,23 @@ var OC={
return ''; return '';
} }
var path = ''; var path = '';
var lastArg = arguments[arguments.length - 1]; // convert to array
var leadingSlash = arguments[0].charAt(0) === '/'; var args = Array.prototype.slice.call(arguments);
// discard empty arguments
args = _.filter(args, function(arg) {
return arg.length > 0;
});
if (args.length < 1) {
return '';
}
var lastArg = args[args.length - 1];
var leadingSlash = args[0].charAt(0) === '/';
var trailingSlash = lastArg.charAt(lastArg.length - 1) === '/'; var trailingSlash = lastArg.charAt(lastArg.length - 1) === '/';
var sections = []; var sections = [];
var i; var i;
for (i = 0; i < arguments.length; i++) { for (i = 0; i < args.length; i++) {
sections = sections.concat(arguments[i].split('/')); sections = sections.concat(args[i].split('/'));
} }
var first = !leadingSlash; var first = !leadingSlash;
for (i = 0; i < sections.length; i++) { for (i = 0; i < sections.length; i++) {

View File

@ -147,11 +147,15 @@ describe('Core base tests', function() {
}); });
it('keeps leading slashes', function() { it('keeps leading slashes', function() {
expect(OC.joinPaths('/abc')).toEqual('/abc'); expect(OC.joinPaths('/abc')).toEqual('/abc');
expect(OC.joinPaths('/abc', '')).toEqual('/abc');
expect(OC.joinPaths('', '/abc')).toEqual('/abc');
expect(OC.joinPaths('/abc', 'def')).toEqual('/abc/def'); expect(OC.joinPaths('/abc', 'def')).toEqual('/abc/def');
expect(OC.joinPaths('/abc', 'def', 'ghi')).toEqual('/abc/def/ghi'); expect(OC.joinPaths('/abc', 'def', 'ghi')).toEqual('/abc/def/ghi');
}); });
it('keeps trailing slashes', function() { it('keeps trailing slashes', function() {
expect(OC.joinPaths('', 'abc/')).toEqual('abc/');
expect(OC.joinPaths('abc/')).toEqual('abc/'); expect(OC.joinPaths('abc/')).toEqual('abc/');
expect(OC.joinPaths('abc/', '')).toEqual('abc/');
expect(OC.joinPaths('abc', 'def/')).toEqual('abc/def/'); expect(OC.joinPaths('abc', 'def/')).toEqual('abc/def/');
expect(OC.joinPaths('abc', 'def', 'ghi/')).toEqual('abc/def/ghi/'); expect(OC.joinPaths('abc', 'def', 'ghi/')).toEqual('abc/def/ghi/');
}); });