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:
parent
d0c6179ec1
commit
f1fccaca06
|
@ -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;
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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}));
|
||||
|
|
Loading…
Reference in New Issue