From 71ccd6766510088c80d6165a55985d6af1b7281f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 20 Sep 2018 19:47:44 -0400 Subject: [PATCH] closes #6722 calculate size of base64 image from buffer, still not perfect but better than string.length --- public/src/modules/pictureCropper.js | 5 ++++- src/image.js | 4 ++++ src/user/picture.js | 6 +++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/public/src/modules/pictureCropper.js b/public/src/modules/pictureCropper.js index 12491819aa..f732d7a208 100644 --- a/public/src/modules/pictureCropper.js +++ b/public/src/modules/pictureCropper.js @@ -163,7 +163,10 @@ define('pictureCropper', ['translator', 'cropper', 'benchpress'], function (tran var reader = new FileReader(); var imageUrl; var imageType = file.type; - + var fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false; + if (file.size > fileSize * 1024) { + return app.alertError('[[error:file-too-big, ' + fileSize + ']]'); + } reader.addEventListener('load', function () { imageUrl = reader.result; diff --git a/src/image.js b/src/image.js index afb4427590..d2cf7f4441 100644 --- a/src/image.js +++ b/src/image.js @@ -125,3 +125,7 @@ image.writeImageDataToTempFile = function (imageData, callback) { callback(err, filepath); }); }; + +image.sizeFromBase64 = function (imageData) { + return Buffer.from(imageData.slice(imageData.indexOf('base64') + 7), 'base64').length; +}; diff --git a/src/user/picture.js b/src/user/picture.js index 05ce284238..d39bce659d 100644 --- a/src/user/picture.js +++ b/src/user/picture.js @@ -37,7 +37,7 @@ module.exports = function (User) { async.waterfall([ function (next) { - var size = data.file ? data.file.size : data.imageData.length; + var size = data.file ? data.file.size : image.sizeFromBase64(data.imageData); meta.config.maximumCoverImageSize = meta.config.maximumCoverImageSize || 2048; if (size > parseInt(meta.config.maximumCoverImageSize, 10) * 1024) { return next(new Error('[[error:file-too-big, ' + meta.config.maximumCoverImageSize + ']]')); @@ -89,10 +89,10 @@ module.exports = function (User) { return callback(new Error('[[error:invalid-data]]')); } - var size = data.file ? data.file.size : data.imageData.length; + var size = data.file ? data.file.size : image.sizeFromBase64(data.imageData); var uploadSize = parseInt(meta.config.maximumProfileImageSize, 10) || 256; if (size > uploadSize * 1024) { - return callback(new Error('[[error:file-too-big, ' + meta.config.maximumProfileImageSize + ']]')); + return callback(new Error('[[error:file-too-big, ' + uploadSize + ']]')); } var type = data.file ? data.file.type : image.mimeFromBase64(data.imageData);