From 8e66d3fc927a119d87189aab2ea74776f6328599 Mon Sep 17 00:00:00 2001 From: dusanmi Date: Sun, 4 Aug 2024 21:01:41 +0200 Subject: [PATCH] FIX: issue #917 (#935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dušan Miška --- src/middlewares/parsers/req.parameter.mutator.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/middlewares/parsers/req.parameter.mutator.ts b/src/middlewares/parsers/req.parameter.mutator.ts index 00ece3cd..bbf08bf2 100644 --- a/src/middlewares/parsers/req.parameter.mutator.ts +++ b/src/middlewares/parsers/req.parameter.mutator.ts @@ -76,7 +76,7 @@ export class RequestParameterMutator { const i = req.originalUrl.indexOf('?'); const queryString = req.originalUrl.substr(i + 1); - if (parameter.in === 'query' && !parameter.allowReserved) { + if (parameter.in === 'query' && !parameter.allowReserved && parameter.explode === true) { this.validateReservedCharacters(name, rawQuery); } @@ -94,7 +94,15 @@ export class RequestParameterMutator { } else if (type === 'array' && !explode) { const delimiter = ARRAY_DELIMITER[parameter.style]; this.validateArrayDelimiter(delimiter, parameter); - this.parseJsonArrayAndMutateRequest(req, parameter.in, name, delimiter); + if (parameter.in === "query") { + const field = REQUEST_FIELDS[parameter.in]; + const vs = rawQuery.get(name); + if (vs) { + req[field][name] = vs[0].split(delimiter).map(v => decodeURIComponent(v)); + } + } else { + this.parseJsonArrayAndMutateRequest(req, parameter.in, name, delimiter); + } } else if (type === 'array' && explode) { this.explodeJsonArrayAndMutateRequest(req, parameter.in, name); } else if (style === 'form' && explode) {