Skip to content

Commit 1513768

Browse files
acul71SgtPooki
andauthored
fix: handle valid CIDR ranges for IPv4 and IPv6 (#394)
Add missing case 43 (ipcidr) to ```convert.ts``` to properly handle CIDR ranges Add two new test cases Fixes #393 --------- Co-authored-by: Russell Dempsey <[email protected]>
1 parent 02579d6 commit 1513768

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/convert.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export function convert (proto: string, a: string | Uint8Array): Uint8Array | st
3232
/**
3333
* Convert [code,Uint8Array] to string
3434
*/
35+
// eslint-disable-next-line complexity
3536
export function convertToString (proto: number | string, buf: Uint8Array): string {
3637
const protocol = getProtocol(proto)
3738
switch (protocol.code) {
@@ -40,6 +41,8 @@ export function convertToString (proto: number | string, buf: Uint8Array): strin
4041
return bytes2ip(buf)
4142
case 42: // ipv6zone
4243
return bytes2str(buf)
44+
case 43: // ipcidr
45+
return uint8ArrayToString(buf, 'base10')
4346

4447
case 6: // tcp
4548
case 273: // udp
@@ -71,6 +74,7 @@ export function convertToString (proto: number | string, buf: Uint8Array): strin
7174
}
7275
}
7376

77+
// eslint-disable-next-line complexity
7478
export function convertToBytes (proto: string | number, str: string): Uint8Array {
7579
const protocol = getProtocol(proto)
7680
switch (protocol.code) {
@@ -80,6 +84,8 @@ export function convertToBytes (proto: string | number, str: string): Uint8Array
8084
return ip2bytes(str)
8185
case 42: // ipv6zone
8286
return str2bytes(str)
87+
case 43: // ipcidr
88+
return uint8ArrayFromString(str, 'base10')
8389

8490
case 6: // tcp
8591
case 273: // udp

test/filter/multiaddr-filter.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ describe('MultiaddrFilter', () => {
1414
['/ip4/192.168.10.10/ipcidr/24', '/ip4/192.168.11.2/udp/60', false],
1515
['/ip4/192.168.10.10/ipcidr/24', '/ip6/2001:db8:3333:4444:5555:6666:7777:8888/tcp/60', false],
1616
['/ip6/2001:db8:3333:4444:5555:6666:7777:8888/ipcidr/60', '/ip6/2001:0db8:3333:4440:0000:0000:0000:0000/tcp/60', true],
17-
['/ip6/2001:db8:3333:4444:5555:6666:7777:8888/ipcidr/60', '/ip6/2001:0db8:3333:4450:0000:0000:0000:0000/tcp/60', false]
17+
['/ip6/2001:db8:3333:4444:5555:6666:7777:8888/ipcidr/60', '/ip6/2001:0db8:3333:4450:0000:0000:0000:0000/tcp/60', false],
18+
['/ip6/2001:db8:3333:4444:5555:6666:7777:8888/ipcidr/128', '/ip6/2001:db8:3333:4444:5555:6666:7777:8888/tcp/60', true],
19+
['/ip6/2001:db8:3333:4444:5555:6666:7777:8888/ipcidr/128', '/ip6/2001:db8:3333:4444:5555:6666:7777:8880/tcp/60', false]
1820
]
1921

2022
cases.forEach(([cidr, ip, result]) => {

0 commit comments

Comments
 (0)