mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
check size of zip files
This commit is contained in:
parent
da242d90e6
commit
6664b67fba
2 changed files with 54 additions and 21 deletions
|
@ -4,12 +4,31 @@ metrics = require "../../infrastructure/Metrics"
|
||||||
fs = require "fs"
|
fs = require "fs"
|
||||||
Path = require "path"
|
Path = require "path"
|
||||||
|
|
||||||
|
ONE_MEG = 1024 * 1024
|
||||||
|
|
||||||
module.exports = ArchiveManager =
|
module.exports = ArchiveManager =
|
||||||
extractZipArchive: (source, destination, _callback = (err) ->) ->
|
extractZipArchive: (source, destination, _callback = (err) ->) ->
|
||||||
callback = (args...) ->
|
callback = (args...) ->
|
||||||
_callback(args...)
|
_callback(args...)
|
||||||
_callback = () ->
|
_callback = () ->
|
||||||
|
|
||||||
|
child.exec "unzip -l #{source} | tail -n 1", (err, result)->
|
||||||
|
if err?
|
||||||
|
logger.err err:err, "error checking size of zip file"
|
||||||
|
return callback(err)
|
||||||
|
|
||||||
|
totalSizeInBytes = result.trim()?.split(" ")?[0]
|
||||||
|
|
||||||
|
if !totalSizeInBytes?
|
||||||
|
logger.err source:source, "error getting bytes of zip"
|
||||||
|
return callback(new Error("something went wrong"))
|
||||||
|
|
||||||
|
if totalSizeInBytes > ONE_MEG * 300
|
||||||
|
logger.log source:source, totalSizeInBytes:totalSizeInBytes, "zip file too large"
|
||||||
|
return callback(new Error("zip_too_large"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
timer = new metrics.Timer("unzipDirectory")
|
timer = new metrics.Timer("unzipDirectory")
|
||||||
logger.log source: source, destination: destination, "unzipping file"
|
logger.log source: source, destination: destination, "unzipping file"
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ describe "ArchiveManager", ->
|
||||||
@process.stderr = new events.EventEmitter
|
@process.stderr = new events.EventEmitter
|
||||||
@child =
|
@child =
|
||||||
spawn: sinon.stub().returns(@process)
|
spawn: sinon.stub().returns(@process)
|
||||||
|
exec: sinon.stub().callsArgWith(1, null, " 109042 2 files")
|
||||||
@metrics =
|
@metrics =
|
||||||
Timer: class Timer
|
Timer: class Timer
|
||||||
done: sinon.stub()
|
done: sinon.stub()
|
||||||
|
@ -58,6 +59,19 @@ describe "ArchiveManager", ->
|
||||||
it "should log out the error", ->
|
it "should log out the error", ->
|
||||||
@logger.error.called.should.equal true
|
@logger.error.called.should.equal true
|
||||||
|
|
||||||
|
describe "with a zip that is too large", ->
|
||||||
|
beforeEach (done) ->
|
||||||
|
@child.exec = sinon.stub().callsArgWith(1, null, " 10000000000009042 2 files")
|
||||||
|
@ArchiveManager.extractZipArchive @source, @destination, (error) =>
|
||||||
|
@callback(error)
|
||||||
|
done()
|
||||||
|
|
||||||
|
it "should return the callback with an error", ->
|
||||||
|
@callback.calledWithExactly(new Error("zip_too_large")).should.equal true
|
||||||
|
|
||||||
|
it "should not call spawn", ->
|
||||||
|
@child.spawn.called.should.equal false
|
||||||
|
|
||||||
describe "with an error on the process", ->
|
describe "with an error on the process", ->
|
||||||
beforeEach (done) ->
|
beforeEach (done) ->
|
||||||
@ArchiveManager.extractZipArchive @source, @destination, (error) =>
|
@ArchiveManager.extractZipArchive @source, @destination, (error) =>
|
||||||
|
|
Loading…
Reference in a new issue