From a70cbf7012bcc458422d0d28b5d3c1e440f9abb5 Mon Sep 17 00:00:00 2001 From: Marceli Pawlinski Date: Wed, 2 Sep 2026 00:05:00 +0100 Subject: [PATCH] fix: accept a comma-delimited list in req.acceptsCharsets --- lib/request.js | 4 +++- test/req.acceptsCharsets.js | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/request.js b/lib/request.js index 1eb7f9ca16a..a789f60491c 100644 --- a/lib/request.js +++ b/lib/request.js @@ -170,7 +170,9 @@ req.acceptsEncodings = function(){ req.acceptsCharsets = function(...charsets) { const accept = accepts(this); - return accept.charsets(...charsets); + return accept.charsets(...charsets.flatMap((charset) => + Array.isArray(charset) ? charset : String(charset).split(',').map((s) => s.trim()) + )); }; /** diff --git a/test/req.acceptsCharsets.js b/test/req.acceptsCharsets.js index 2df68ae1097..8116a9943d8 100644 --- a/test/req.acceptsCharsets.js +++ b/test/req.acceptsCharsets.js @@ -58,6 +58,32 @@ describe('req', function(){ .set('Accept-Charset', 'iso-8859-1, utf-8') .expect('iso-8859-1', done); }) + + it('should accept a comma-delimited list of charsets', function (done) { + var app = express(); + + app.use(function(req, res, next){ + res.end(req.acceptsCharsets('iso-8859-1, utf-8')); + }); + + request(app) + .get('/') + .set('Accept-Charset', 'iso-8859-1, utf-8') + .expect('iso-8859-1', done); + }) + + it('should not modify a single charset when given a comma-delimited list', function (done) { + var app = express(); + + app.use(function(req, res, next){ + res.end(req.acceptsCharsets('utf-8, iso-8859-1')); + }); + + request(app) + .get('/') + .set('Accept-Charset', 'utf-8, iso-8859-1') + .expect('utf-8', done); + }) }) }) })