From 821c464c5ebc375d30850ae3f7e657f12d4b9945 Mon Sep 17 00:00:00 2001 From: surefire Date: Mon, 28 Nov 2022 14:13:34 +0300 Subject: [PATCH] fix(fetch): parse multipart form data non-ascii filed names --- lib/fetch/body.js | 5 ++++- test/fetch/client-fetch.js | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/fetch/body.js b/lib/fetch/body.js index ea245e646e0..80dab433a97 100644 --- a/lib/fetch/body.js +++ b/lib/fetch/body.js @@ -378,7 +378,10 @@ function bodyMixinMethods (instance) { let busboy try { - busboy = Busboy({ headers }) + busboy = Busboy({ + headers, + defParamCharset: 'utf8' + }) } catch (err) { // Error due to headers: throw Object.assign(new TypeError(), { cause: err }) diff --git a/test/fetch/client-fetch.js b/test/fetch/client-fetch.js index a378dc7d7dd..7a0cb550f54 100644 --- a/test/fetch/client-fetch.js +++ b/test/fetch/client-fetch.js @@ -227,6 +227,26 @@ test('multipart formdata base64', (t) => { }) }) +test('multipart fromdata non-ascii filed names', async (t) => { + t.plan(1) + + const request = new Request('http://localhost', { + method: 'POST', + headers: { + 'Content-Type': 'multipart/form-data; boundary=----formdata-undici-0.6204674738279623' + }, + body: + '------formdata-undici-0.6204674738279623\r\n' + + 'Content-Disposition: form-data; name="fiŝo"\r\n' + + '\r\n' + + 'value1\r\n' + + '------formdata-undici-0.6204674738279623--' + }) + + const form = await request.formData() + t.equal(form.get('fiŝo'), 'value1') +}) + test('busboy emit error', async (t) => { t.plan(1) const formData = new FormData()