lib/request: validate response content-type 🐛

This commit is contained in:
Jannis R 2021-04-18 18:42:03 +02:00
parent 99142acf8b
commit 7cb6210847
2 changed files with 12 additions and 0 deletions

View file

@ -14,6 +14,7 @@ const captureStackTrace = DEV ? require('capture-stack-trace') : () => {}
const {stringify} = require('qs')
const Promise = require('pinkie-promise')
const {fetch} = require('fetch-ponyfill')({Promise})
const {parse: parseContentType} = require('content-type')
const {addErrorInfo} = require('./errors')
const proxyAddress = process.env.HTTPS_PROXY || process.env.HTTP_PROXY || null
@ -118,6 +119,16 @@ const request = (ctx, userAgent, reqData) => {
err.message = res.statusText
throw err
}
let cType = res.headers.get('content-type')
if (cType) {
const {type} = parseContentType(cType)
if (type !== 'application/json') {
const err = new Error('invalid response content-type: ' + cType)
err.response = res
throw err
}
}
return res.json()
})
.then((b) => {

View file

@ -42,6 +42,7 @@
"@derhuerst/br2nl": "^1.0.0",
"@derhuerst/round-robin-scheduler": "^1.0.4",
"capture-stack-trace": "^1.0.0",
"content-type": "^1.0.4",
"create-hash": "^1.2.0",
"fetch-ponyfill": "^7.0.0",
"google-polyline": "^1.0.3",