2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-08 17:22:34 +03:00

Merge pull request #275 from bomsy/maxcontentlength

Adding a `maxContentLength` content option
This commit is contained in:
Matt Zabriskie
2016-03-26 11:10:47 -06:00
4 changed files with 39 additions and 2 deletions
+4 -1
View File
@@ -263,7 +263,10 @@ These are the available config options for making requests. Only the `url` is re
// as well as 'GET' downloads
progress: function(progressEvent) {
// Do whatever you want with the native progress event
}
},
// `maxContentLength` defines the max size of the http response content allowed
maxContentLength: 2000
}
```
+5
View File
@@ -90,6 +90,11 @@ module.exports = function httpAdapter(resolve, reject, config) {
var responseBuffer = [];
stream.on('data', function handleStreamData(chunk) {
responseBuffer.push(chunk);
// make sure the content length is not over the maxContentLength if specified
if (config.maxContentLength > -1 && Buffer.concat(responseBuffer).length > config.maxContentLength) {
reject(new Error('maxContentLength size of ' + config.maxContentLength + ' exceeded'));
}
});
stream.on('end', function handleStreamEnd() {
+3 -1
View File
@@ -59,5 +59,7 @@ module.exports = {
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN'
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1
};
+27
View File
@@ -127,4 +127,31 @@ module.exports = {
});
});
},
testMaxContentLength: function(test) {
var str = Array(100000).join('ж');
server = http.createServer(function (req, res) {
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
res.end(str);
}).listen(4444, function () {
var success = false, failure = false, error;
axios.get('http://localhost:4444/', {
maxContentLength: 2000
}).then(function (res) {
success = true;
}).catch(function (res) {
error = res;
failure = true;
});
setTimeout(function () {
test.equal(success, false, 'request should not succeed');
test.equal(failure, true, 'request should fail');
test.equal(error.message, 'maxContentLength size of 2000 exceeded');
test.done();
}, 100);
});
}
};