From 7cb62108473314a247ef6e20043a8df2e042cd17 Mon Sep 17 00:00:00 2001 From: Jannis R Date: Sun, 18 Apr 2021 18:42:03 +0200 Subject: [PATCH] =?UTF-8?q?lib/request:=20validate=20response=20content-ty?= =?UTF-8?q?pe=20=F0=9F=90=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/request.js | 11 +++++++++++ package.json | 1 + 2 files changed, 12 insertions(+) diff --git a/lib/request.js b/lib/request.js index 1395dd18..06e4f20b 100644 --- a/lib/request.js +++ b/lib/request.js @@ -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) => { diff --git a/package.json b/package.json index 43345c94..da7e15ef 100644 --- a/package.json +++ b/package.json @@ -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",