// This tests that proxy URLs with invalid credentials (containing \r or \n characters) // are rejected with an appropriate error. import '../common/index.mjs'; import assert from 'node:assert'; import http from 'node:http'; const testCases = [ { name: 'carriage return in username', proxyUrl: 'http://user\r:pass@proxy.example.com:8080', expectedError: { code: 'ERR_PROXY_INVALID_CONFIG', message: /Invalid proxy URL/ }, }, { name: 'newline in username', proxyUrl: 'http://user\n:pass@proxy.example.com:8080', expectedError: { code: 'ERR_PROXY_INVALID_CONFIG', message: /Invalid proxy URL/ }, }, { name: 'carriage return in password', proxyUrl: 'http://user:pass\r@proxy.example.com:8080', expectedError: { code: 'ERR_PROXY_INVALID_CONFIG', message: /Invalid proxy URL/ }, }, { name: 'newline in password', proxyUrl: 'http://user:pass\n@proxy.example.com:8080', expectedError: { code: 'ERR_PROXY_INVALID_CONFIG', message: /Invalid proxy URL/ }, }, { name: 'CRLF injection attempt in username', proxyUrl: 'http://user\r\nHost: example.com:pass@proxy.example.com:8080', expectedError: { code: 'ERR_PROXY_INVALID_CONFIG', message: /Invalid proxy URL/ }, }, { name: 'CRLF injection attempt in password', proxyUrl: 'http://user:pass\r\nHost: example.com@proxy.example.com:8080', expectedError: { code: 'ERR_PROXY_INVALID_CONFIG', message: /Invalid proxy URL/ }, }, ]; for (const testCase of testCases) { // Test that creating an agent with invalid proxy credentials throws an error assert.throws(() => { new http.Agent({ proxyEnv: { HTTP_PROXY: testCase.proxyUrl, }, }); }, testCase.expectedError); }