From e315325d91b01f58e0fd0877cdb5e4a781dd8209 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 20 Jun 2019 21:15:20 +0100 Subject: [PATCH] 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 --- package.json | 1 + .../@node-red/nodes/core/io/21-httpin.js | 29 +++++++++++-------- .../node_modules/@node-red/nodes/package.json | 1 + 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index d401a614e..30ef53dc0 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/node_modules/@node-red/nodes/core/io/21-httpin.js b/packages/node_modules/@node-red/nodes/core/io/21-httpin.js index 7e90478f7..fc3fafd28 100644 --- a/packages/node_modules/@node-red/nodes/core/io/21-httpin.js +++ b/packages/node_modules/@node-red/nodes/core/io/21-httpin.js @@ -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; + } + } } diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json index 9263de215..6916eadaf 100644 --- a/packages/node_modules/@node-red/nodes/package.json +++ b/packages/node_modules/@node-red/nodes/package.json @@ -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",