fix(https2): ipv6 addresses url · forwardemail/superagent@e29fd25

3 files changed

lines changed

Original file line numberDiff line numberDiff line change

@@ -17,6 +17,7 @@

1717

"no-undef": "off",

1818

"no-unused-vars": "off",

1919

"no-useless-escape": "off",

20+

"no-obj-calls": "off",

2021

"no-cond-assign": "off",

2122

"no-redeclare": "off",

2223

"node/no-exports-assign": "off",

Original file line numberDiff line numberDiff line change

@@ -21,6 +21,10 @@ function setProtocol(protocol) {

2121

};

2222

}

2323
24+

function normalizeIpv6Host(host) {

25+

return net.isIP(host) === 6 ? `[${host}]` : host;

26+

}

27+
2428

class Request extends Stream {

2529

constructor(protocol, options) {

2630

super();

@@ -48,11 +52,12 @@ class Request extends Stream {

4852
4953

this._headers = {};

5054
55+

const normalizedHost = normalizeIpv6Host(host);

5156

const session = http2.connect(

52-

`${protocol}//${host}:${port}`,

57+

`${protocol}//${normalizedHost}:${port}`,

5358

sessionOptions

5459

);

55-

this.setHeader('host', `${host}:${port}`);

60+

this.setHeader('host', `${normalizedHost}:${port}`);

5661
5762

session.on('error', (error) => this.emit('error', error));

5863
Original file line numberDiff line numberDiff line change

@@ -134,23 +134,21 @@ describe('[node] request', () => {

134134

});

135135

});

136136
137-

if (doesntWorkInHttp2) {

138-

describe('ipv6 address', () => {

139-

it('should successfully query an ipv6 address', (done) => {

140-

request.get(`http://[::]:${process.env.ZUUL_PORT}/url?a=(b%29`).end((error, res) => {

141-

assert.equal('/url?a=(b%29', res.text);

142-

done();

143-

});

137+

describe('ipv6 address', () => {

138+

it('should successfully query an ipv6 address', (done) => {

139+

request.get(`http://[::]:${process.env.ZUUL_PORT}/url?a=(b%29`).end((error, res) => {

140+

assert.equal('/url?a=(b%29', res.text);

141+

done();

144142

});

143+

});

145144
146-

it('should successfully query an ipv6 address', (done) => {

147-

request.get(`http://[::1]:${process.env.ZUUL_PORT}/url?a=(b%29`).end((error, res) => {

148-

assert.equal('/url?a=(b%29', res.text);

149-

done();

150-

});

145+

it('should successfully query an ipv6 address', (done) => {

146+

request.get(`http://[::1]:${process.env.ZUUL_PORT}/url?a=(b%29`).end((error, res) => {

147+

assert.equal('/url?a=(b%29', res.text);

148+

done();

151149

});

152150

});

153-

}

151+

});

154152
155153

describe('.buffer()', () => {

156154

it('should enable buffering', (done) => {