Skip to content

Commit

Permalink
lib,test: fix bug in InternalSocketAddress
Browse files Browse the repository at this point in the history
InternalSocketAddress must set [kDetails] in order for the inherited
properties to function correctly.

Co-authored-by: Tobias Nießen <tniessen@tnie.de>
PR-URL: #44618
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
  • Loading branch information
tniessen authored and juanarbol committed Oct 4, 2022
1 parent c4c7136 commit 66c0952
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/internal/socketaddress.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,12 @@ class InternalSocketAddress extends JSTransferable {
constructor(handle) {
super();
this[kHandle] = handle;
this[kDetail] = this[kHandle]?.detail({
address: undefined,
port: undefined,
family: undefined,
flowlabel: undefined,
});
}
}

Expand Down
27 changes: 27 additions & 0 deletions test/parallel/test-socketaddress.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Flags: --expose-internals
'use strict';

const common = require('../common');
Expand All @@ -10,6 +11,15 @@ const {
SocketAddress,
} = require('net');

const {
InternalSocketAddress,
} = require('internal/socketaddress');
const { internalBinding } = require('internal/test/binding');
const {
SocketAddress: _SocketAddress,
AF_INET
} = internalBinding('block_list');

{
const sa = new SocketAddress();
strictEqual(sa.address, '127.0.0.1');
Expand Down Expand Up @@ -108,3 +118,20 @@ const {
throws(() => new SocketAddress({ flowlabel: -1 }), {
code: 'ERR_OUT_OF_RANGE'
});

{
// Test that the internal helper class InternalSocketAddress correctly
// inherits from SocketAddress and that it does not throw when its properties
// are accessed.

const address = '127.0.0.1';
const port = 8080;
const flowlabel = 0;
const handle = new _SocketAddress(address, port, AF_INET, flowlabel);
const addr = new InternalSocketAddress(handle);
ok(addr instanceof SocketAddress);
strictEqual(addr.address, address);
strictEqual(addr.port, port);
strictEqual(addr.family, 'ipv4');
strictEqual(addr.flowlabel, flowlabel);
}

0 comments on commit 66c0952

Please sign in to comment.