From 552016108883e6ba51845a06d8e93b4790a628ec Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Fri, 28 Jan 2022 21:16:05 -0500 Subject: [PATCH] deps: Upgrade formidable to 2.0.1 --- src/node/handler/ImportHandler.js | 25 +++++------------ src/node/hooks/express/apicalls.js | 9 ++++--- src/package-lock.json | 43 +++++++++++++++++++++++++++--- src/package.json | 2 +- 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/node/handler/ImportHandler.js b/src/node/handler/ImportHandler.js index 9f2a53843..8cdc04f72 100644 --- a/src/node/handler/ImportHandler.js +++ b/src/node/handler/ImportHandler.js @@ -26,7 +26,7 @@ const padMessageHandler = require('./PadMessageHandler'); const fs = require('fs').promises; const path = require('path'); const settings = require('../utils/Settings'); -const formidable = require('formidable'); +const {Formidable} = require('formidable'); const os = require('os'); const importHtml = require('../utils/ImportHtml'); const importEtherpad = require('../utils/ImportEtherpad'); @@ -83,22 +83,11 @@ const doImport = async (req, res, padId) => { // setting flag for whether to use converter or not let useConverter = (converter != null); - const form = new formidable.IncomingForm(); - form.keepExtensions = true; - form.uploadDir = tmpDirectory; - form.maxFileSize = settings.importMaxFileSize; - - // Ref: https://github.com/node-formidable/formidable/issues/469 - // Crash in Etherpad was Uploading Error: Error: Request aborted - // [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed - form.onPart = (part) => { - form.handlePart(part); - if (part.filename !== undefined) { - form.openedFiles[form.openedFiles.length - 1]._writeStream.on('error', (err) => { - form.emit('error', err); - }); - } - }; + const form = new Formidable({ + keepExtensions: true, + uploadDir: tmpDirectory, + maxFileSize: settings.importMaxFileSize, + }); // locally wrapped Promise, since form.parse requires a callback let srcFile = await new Promise((resolve, reject) => { @@ -115,7 +104,7 @@ const doImport = async (req, res, padId) => { logger.warn('Import failed because form had no file'); return reject(new ImportError('uploadFailed')); } - resolve(files.file.path); + resolve(files.file.filepath); }); }); diff --git a/src/node/hooks/express/apicalls.js b/src/node/hooks/express/apicalls.js index 834cb4a4b..010ab14e5 100644 --- a/src/node/hooks/express/apicalls.js +++ b/src/node/hooks/express/apicalls.js @@ -2,22 +2,23 @@ const log4js = require('log4js'); const clientLogger = log4js.getLogger('client'); -const formidable = require('formidable'); +const {Formidable} = require('formidable'); const apiHandler = require('../../handler/APIHandler'); const util = require('util'); exports.expressPreSession = async (hookName, {app}) => { // The Etherpad client side sends information about how a disconnect happened app.post('/ep/pad/connection-diagnostic-info', (req, res) => { - new formidable.IncomingForm().parse(req, (err, fields, files) => { + new Formidable().parse(req, (err, fields, files) => { clientLogger.info(`DIAGNOSTIC-INFO: ${fields.diagnosticInfo}`); res.end('OK'); }); }); const parseJserrorForm = async (req) => await new Promise((resolve, reject) => { - const form = new formidable.IncomingForm(); - form.maxFileSize = 1; // Files are not expected. Not sure if 0 means unlimited, so 1 is used. + const form = new Formidable({ + maxFileSize: 1, // Files are not expected. Not sure if 0 means unlimited, so 1 is used. + }); form.on('error', (err) => reject(err)); form.parse(req, (err, fields) => err != null ? reject(err) : resolve(fields.errorInfo)); }); diff --git a/src/package-lock.json b/src/package-lock.json index 071b3d886..ae95a6fa6 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -936,6 +936,11 @@ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1537,6 +1542,15 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -2452,9 +2466,22 @@ } }, "formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + } + } }, "forwarded": { "version": "0.2.0", @@ -2801,6 +2828,11 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -8400,6 +8432,11 @@ "mime-types": "^2.1.12" } }, + "formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" + }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", diff --git a/src/package.json b/src/package.json index 52d87203d..f789d86e7 100644 --- a/src/package.json +++ b/src/package.json @@ -42,7 +42,7 @@ "express-session": "npm:@etherpad/express-session@^1.18.1", "fast-deep-equal": "^3.1.3", "find-root": "1.1.0", - "formidable": "^1.2.6", + "formidable": "^2.0.1", "http-errors": "^2.0.0", "js-cookie": "^3.0.1", "jsdom": "^18.1.1",