better quota validation

this fixes #3634

1. fixed computerFileSize to be more picky about incorrect values
2. more tests for computerFileSize
3. use computerFileSize to validate user quota

Signed-off-by: Artur Neumann <info@individual-it.net>
This commit is contained in:
Artur Neumann 2017-02-27 12:34:15 +05:45
parent d0c6179ec1
commit f1fccaca06
3 changed files with 27 additions and 12 deletions

View File

@ -1678,16 +1678,12 @@ OC.Util = {
*
*/
computerFileSize: function (string) {
if (typeof string != 'string') {
if (typeof string !== 'string') {
return null;
}
var s = string.toLowerCase();
var bytes = parseFloat(s)
if (!isNaN(bytes) && isFinite(s)) {
return bytes;
}
var bytes = null;
var bytesArray = {
'b' : 1,
@ -1703,12 +1699,18 @@ OC.Util = {
'p' : 1024 * 1024 * 1024 * 1024 * 1024
};
var matches = s.match(/([kmgtp]?b?)$/i);
if (matches[1]) {
bytes = bytes * bytesArray[matches[1]];
var matches = s.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);
if (matches !== null) {
bytes = parseFloat(s);
if (!isFinite(bytes)) {
return null;
}
} else {
return null;
}
if (matches[5]) {
bytes = bytes * bytesArray[matches[5]];
}
bytes = Math.round(bytes);
return bytes;

View File

@ -594,8 +594,14 @@ describe('Core base tests', function() {
it('correctly parses file sizes from a human readable formated string', function() {
var data = [
['125', 125],
['125.25', 125.25],
['125.25', 125],
['125.25B', 125],
['125.25 B', 125],
['0 B', 0],
['99999999999999999999999999999999999999999999 B', 99999999999999999999999999999999999999999999],
['0 MB', 0],
['0 kB', 0],
['0kB', 0],
['125 B', 125],
['125b', 125],
['125 KB', 128000],
@ -605,7 +611,14 @@ describe('Core base tests', function() {
['119.2 GB', 127990025421],
['119.2gb', 127990025421],
['116.4 TB', 127983153473126],
['116.4tb', 127983153473126]
['116.4tb', 127983153473126],
['8776656778888777655.4tb', 9.650036181387265e+30],
[1234, null],
[-1234, null],
['-1234 B', null],
['B', null],
['40/0', null],
['40,30 kb', null],
];
for (var i = 0; i < data.length; i++) {
expect(OC.Util.computerFileSize(data[i][0])).toEqual(data[i][1]);

View File

@ -533,7 +533,7 @@ var UserList = {
if (quota === 'other') {
return;
}
if ((quota !== 'default' && quota !=="none") && (isNaN(parseInt(quota, 10)) || parseInt(quota, 10) < 0)) {
if ((quota !== 'default' && quota !=="none") && (!OC.Util.computerFileSize(quota))) {
// the select component has added the bogus value, delete it again
$select.find('option[selected]').remove();
OC.Notification.showTemporary(t('core', 'Invalid quota value "{val}"', {val: quota}));