2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-17 19:21:29 +03:00

fix: formidable dependency vulnerable to arbitrary (#7533)

* fix: dependabot uses the correct labels

* fix: issue #7463

* fix: update to the latest version of formidable
This commit is contained in:
Jay
2026-03-19 16:08:47 +02:00
committed by GitHub
parent 3a6f5c1ae1
commit 4d8931ca8a
4 changed files with 25 additions and 23 deletions
+8 -6
View File
@@ -36,7 +36,7 @@
"eslint": "^10.0.3", "eslint": "^10.0.3",
"express": "^5.2.1", "express": "^5.2.1",
"formdata-node": "^5.0.1", "formdata-node": "^5.0.1",
"formidable": "^2.1.5", "formidable": "^3.2.4",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"get-stream": "^9.0.1", "get-stream": "^9.0.1",
"globals": "^17.4.0", "globals": "^17.4.0",
@@ -7094,16 +7094,18 @@
} }
}, },
"node_modules/formidable": { "node_modules/formidable": {
"version": "2.1.5", "version": "3.5.4",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
"integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==", "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@paralleldrive/cuid2": "^2.2.2", "@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4", "dezalgo": "^1.0.4",
"once": "^1.4.0", "once": "^1.4.0"
"qs": "^6.11.0" },
"engines": {
"node": ">=14.0.0"
}, },
"funding": { "funding": {
"url": "https://ko-fi.com/tunnckoCore/commissions" "url": "https://ko-fi.com/tunnckoCore/commissions"
+1 -1
View File
@@ -109,7 +109,7 @@
"eslint": "^10.0.3", "eslint": "^10.0.3",
"express": "^5.2.1", "express": "^5.2.1",
"formdata-node": "^5.0.1", "formdata-node": "^5.0.1",
"formidable": "^2.1.5", "formidable": "^3.2.4",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"get-stream": "^9.0.1", "get-stream": "^9.0.1",
"globals": "^17.4.0", "globals": "^17.4.0",
+2 -2
View File
@@ -3,7 +3,7 @@ import http2 from 'http2';
import stream from 'stream'; import stream from 'stream';
import getStream, { getStreamAsBuffer } from 'get-stream'; import getStream, { getStreamAsBuffer } from 'get-stream';
import { Throttle } from 'stream-throttle'; import { Throttle } from 'stream-throttle';
import formidable from 'formidable'; import { IncomingForm } from 'formidable';
import selfsigned from 'selfsigned'; import selfsigned from 'selfsigned';
export const SERVER_HANDLER_STREAM_ECHO = (req, res) => req.pipe(res); export const SERVER_HANDLER_STREAM_ECHO = (req, res) => req.pipe(res);
@@ -124,7 +124,7 @@ export const stopAllTrackedHTTPServers = async (timeout = 10000) => {
export const handleFormData = (req) => { export const handleFormData = (req) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const form = new formidable.IncomingForm(); const form = new IncomingForm();
form.parse(req, (err, fields, files) => { form.parse(req, (err, fields, files) => {
if (err) { if (err) {
+14 -14
View File
@@ -22,7 +22,7 @@ import os from 'os';
import path from 'path'; import path from 'path';
import devNull from 'dev-null'; import devNull from 'dev-null';
import FormDataLegacy from 'form-data'; import FormDataLegacy from 'form-data';
import formidable from 'formidable'; import { IncomingForm } from 'formidable';
import { FormData as FormDataPolyfill, Blob as BlobPolyfill } from 'formdata-node'; import { FormData as FormDataPolyfill, Blob as BlobPolyfill } from 'formdata-node';
import express from 'express'; import express from 'express';
import multer from 'multer'; import multer from 'multer';
@@ -2285,7 +2285,7 @@ describe('supports http with nodejs', () => {
const server = await startHTTPServer( const server = await startHTTPServer(
(req, res) => { (req, res) => {
const receivedForm = new formidable.IncomingForm(); const receivedForm = new IncomingForm();
assert.ok(req.rawHeaders.some((header) => header.toLowerCase() === 'content-length')); assert.ok(req.rawHeaders.some((header) => header.toLowerCase() === 'content-length'));
@@ -2314,15 +2314,15 @@ describe('supports http with nodejs', () => {
}, },
}); });
assert.deepStrictEqual(response.data.fields, { foo: 'bar' }); assert.deepStrictEqual(response.data.fields, { foo: ['bar'] });
assert.strictEqual(response.data.files.file1.mimetype, 'image/jpeg'); assert.strictEqual(response.data.files.file1[0].mimetype, 'image/jpeg');
assert.strictEqual(response.data.files.file1.originalFilename, 'temp/bar.jpg'); assert.strictEqual(response.data.files.file1[0].originalFilename, 'temp/bar.jpg');
assert.strictEqual(response.data.files.file1.size, 3); assert.strictEqual(response.data.files.file1[0].size, 3);
assert.strictEqual(response.data.files.fileStream.mimetype, 'image/png'); assert.strictEqual(response.data.files.fileStream[0].mimetype, 'image/png');
assert.strictEqual(response.data.files.fileStream.originalFilename, 'axios.png'); assert.strictEqual(response.data.files.fileStream[0].originalFilename, 'axios.png');
assert.strictEqual(response.data.files.fileStream.size, stat.size); assert.strictEqual(response.data.files.fileStream[0].size, stat.size);
} finally { } finally {
await stopHTTPServer(server); await stopHTTPServer(server);
} }
@@ -2358,10 +2358,10 @@ describe('supports http with nodejs', () => {
maxRedirects: 0, maxRedirects: 0,
}); });
assert.deepStrictEqual(data.fields, { foo1: 'bar1', foo2: 'bar2' }); assert.deepStrictEqual(data.fields, { foo1: ['bar1'], foo2: ['bar2'] });
assert.deepStrictEqual(typeof data.files.file1, 'object'); assert.deepStrictEqual(typeof data.files.file1[0], 'object');
const { size, mimetype, originalFilename } = data.files.file1; const { size, mimetype, originalFilename } = data.files.file1[0];
assert.deepStrictEqual( assert.deepStrictEqual(
{ size, mimetype, originalFilename }, { size, mimetype, originalFilename },
@@ -3270,8 +3270,8 @@ describe('supports http with nodejs', () => {
assert.deepStrictEqual(data, { assert.deepStrictEqual(data, {
fields: { fields: {
x: 'foo', x: ['foo'],
y: 'bar', y: ['bar'],
}, },
files: {}, files: {},
}); });