Fix parsing of content-type header

Fixes #2216

This was broken when we switched from media-typer to content-type
modules for parsing the content-type header.

The content-type header can handle the field with parameters, but
does not do the type/sub-type parsing that media-typer does.

Our code relied on that extra bit of parsing to correctly
identify if the content should be parsed to String or kept as
a buffer.

The fix restores the use of media-typer, but using the result
of the content-type module to make sure it valid
This commit is contained in:
Nick O'Leary 2019-06-20 21:15:20 +01:00
parent f3fc083330
commit e315325d91
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9
3 changed files with 19 additions and 12 deletions

View File

@ -48,6 +48,7 @@
"js-yaml": "3.13.1", "js-yaml": "3.13.1",
"json-stringify-safe": "5.0.1", "json-stringify-safe": "5.0.1",
"jsonata": "1.6.4", "jsonata": "1.6.4",
"media-typer": "1.1.0",
"memorystore": "1.6.1", "memorystore": "1.6.1",
"mime": "2.4.2", "mime": "2.4.2",
"mqtt": "2.18.8", "mqtt": "2.18.8",

View File

@ -23,6 +23,7 @@ module.exports = function(RED) {
var cors = require('cors'); var cors = require('cors');
var onHeaders = require('on-headers'); var onHeaders = require('on-headers');
var typer = require('content-type'); var typer = require('content-type');
var mediaTyper = require('media-typer');
var isUtf8 = require('is-utf8'); var isUtf8 = require('is-utf8');
var hashSum = require("hash-sum"); var hashSum = require("hash-sum");
@ -36,7 +37,9 @@ module.exports = function(RED) {
var checkUTF = false; var checkUTF = false;
if (req.headers['content-type']) { if (req.headers['content-type']) {
var parsedType = typer.parse(req.headers['content-type']) var contentType = typer.parse(req.headers['content-type'])
if (contentType.type) {
var parsedType = mediaTyper.parse(contentType.type);
if (parsedType.type === "text") { if (parsedType.type === "text") {
isText = true; isText = true;
} else if (parsedType.subtype === "xml" || parsedType.suffix === "xml") { } else if (parsedType.subtype === "xml" || parsedType.suffix === "xml") {
@ -49,6 +52,8 @@ module.exports = function(RED) {
// applicatino/octet-stream // applicatino/octet-stream
isText = false; isText = false;
} }
}
} }
getBody(req, { getBody(req, {

View File

@ -30,6 +30,7 @@
"https-proxy-agent": "2.2.1", "https-proxy-agent": "2.2.1",
"is-utf8": "0.2.1", "is-utf8": "0.2.1",
"js-yaml": "3.13.1", "js-yaml": "3.13.1",
"media-typer": "1.1.0",
"mqtt": "2.18.8", "mqtt": "2.18.8",
"multer": "1.4.1", "multer": "1.4.1",
"mustache": "3.0.1", "mustache": "3.0.1",