diff --git a/lib/utilities/serverAccessLogger.js b/lib/utilities/serverAccessLogger.js index b474cc81ef..a08bb4e337 100644 --- a/lib/utilities/serverAccessLogger.js +++ b/lib/utilities/serverAccessLogger.js @@ -416,11 +416,11 @@ function logServerAccess(req, res) { userName: params.analyticsUserName ?? undefined, httpMethod: req.method ?? undefined, bytesDeleted: params.analyticsBytesDeleted ?? undefined, - bytesReceived: req.parsedContentLength ?? undefined, + bytesReceived: Number.isInteger(req.parsedContentLength) ? req.parsedContentLength : undefined, bodyLength: req.headers['content-length'] !== undefined ? parseInt(req.headers['content-length'], 10) : undefined, - contentLength: req.parsedContentLength ?? undefined, + contentLength: Number.isInteger(req.parsedContentLength) ? req.parsedContentLength : undefined, // eslint-disable-next-line camelcase elapsed_ms: calculateElapsedMS(params.startTime, params.onCloseEndTime) ?? undefined, diff --git a/package.json b/package.json index 722bed4eec..e6fe2b0bdb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@zenko/cloudserver", - "version": "9.2.14", + "version": "9.2.15", "description": "Zenko CloudServer, an open-source Node.js implementation of a server handling the Amazon S3 protocol", "main": "index.js", "engines": { diff --git a/tests/unit/utils/serverAccessLogger.js b/tests/unit/utils/serverAccessLogger.js index 49aa1abae7..3dece84834 100644 --- a/tests/unit/utils/serverAccessLogger.js +++ b/tests/unit/utils/serverAccessLogger.js @@ -1122,6 +1122,29 @@ describe('serverAccessLogger utility functions', () => { assert.strictEqual(loggedData.errorCode, 'NoSuchKey'); assert.strictEqual('errorCode' in loggedData, true); }); + + it('should omit NaN fields from log output', () => { + setServerAccessLogger(mockLogger); + const req = { + serverAccessLog: {}, + headers: {}, + parsedContentLength: NaN, // Simulates Number.parseInt('', 10) + socket: {}, + }; + const res = { + serverAccessLog: {}, + getHeader: () => null, + }; + + logServerAccess(req, res); + + assert.strictEqual(mockLogger.write.callCount, 1); + const loggedData = JSON.parse(mockLogger.write.firstCall.args[0].trim()); + + // NaN values should be omitted from the log output + assert.strictEqual('bytesReceived' in loggedData, false); + assert.strictEqual('contentLength' in loggedData, false); + }); }); });