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",
"json-stringify-safe": "5.0.1",
"jsonata": "1.6.4",
"media-typer": "1.1.0",
"memorystore": "1.6.1",
"mime": "2.4.2",
"mqtt": "2.18.8",

View File

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

View File

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