From d9cb0de2264379c1b6e9386ff7d12be196448050 Mon Sep 17 00:00:00 2001 From: Sumit Mayani Date: Tue, 21 Apr 2026 11:19:34 +0530 Subject: [PATCH] fix: handle undefined remoteAddress when socket is disconnected getSocketAddr returned undefined when req.socket existed but remoteAddress was undefined (disconnected socket). Also hardened the fallback to safely handle missing req.connection. forwarded() now omits the socket address from the result array rather than including undefined. Closes #12 Assisted-by AI: Claude (Anthropic) --- index.js | 7 +++---- test/test.js | 12 ++++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index b2b6bdd..f3d2d30 100644 --- a/index.js +++ b/index.js @@ -29,7 +29,7 @@ function forwarded (req) { // simple header parsing var proxyAddrs = parse(req.headers['x-forwarded-for'] || '') var socketAddr = getSocketAddr(req) - var addrs = [socketAddr].concat(proxyAddrs) + var addrs = (socketAddr ? [socketAddr] : []).concat(proxyAddrs) // return all addresses return addrs @@ -44,9 +44,8 @@ function forwarded (req) { */ function getSocketAddr (req) { - return req.socket - ? req.socket.remoteAddress - : req.connection.remoteAddress + var socket = req.socket || req.connection + return socket ? socket.remoteAddress : undefined } /** diff --git a/test/test.js b/test/test.js index 08e4964..47bf6d4 100644 --- a/test/test.js +++ b/test/test.js @@ -58,6 +58,18 @@ describe('forwarded(req)', function () { var req = createReq('connection', '10.0.0.1') assert.strictEqual(forwarded(req)[0], '10.0.0.1') }) + + it('should omit socket address when socket is disconnected', function () { + var req = { headers: {}, socket: { remoteAddress: undefined } } + var addrs = forwarded(req) + assert.strictEqual(addrs.indexOf(undefined), -1) + }) + + it('should omit socket address when both socket and connection are absent', function () { + var req = { headers: {} } + var addrs = forwarded(req) + assert.strictEqual(addrs.indexOf(undefined), -1) + }) }) })