Skip to content

Commit 7752f34

Browse files
committed
Merge pull request #19 from jbenet/fix/protos-ipfs
fix: handle variable sized protocols in protoCodes
2 parents e3071d0 + 1bce576 commit 7752f34

File tree

3 files changed

+33
-7
lines changed

3 files changed

+33
-7
lines changed

src/codec.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ module.exports = {
2727
cleanPath: cleanPath,
2828

2929
ParseError: ParseError,
30-
protoFromTuple: protoFromTuple
30+
protoFromTuple: protoFromTuple,
31+
32+
sizeForAddr: sizeForAddr
3133
}
3234

3335
// string -> [[str name, str addr]... ]

src/index.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,20 @@ Multiaddr.prototype.protos = function protos () {
6262

6363
// get the multiaddr protocol codes
6464
Multiaddr.prototype.protoCodes = function protoCodes () {
65-
var codes = []
66-
for (var i = 0; i < this.buffer.length; i++) {
67-
var code = varint.decode(this.buffer, i)
68-
var size = protocols(code).size / 8
69-
i = i + varint.decode.bytes - 1
70-
i += size // skip over proto data
65+
const codes = []
66+
const buf = this.buffer
67+
let i = 0
68+
while (i < buf.length) {
69+
const code = varint.decode(buf, i)
70+
const n = varint.decode.bytes
71+
72+
const p = protocols(code)
73+
const size = codec.sizeForAddr(p, buf.slice(i + n))
74+
75+
i += (size + n)
7176
codes.push(code)
7277
}
78+
7379
return codes
7480
}
7581

test/index.spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,24 @@ describe('helpers', () => {
323323
size: 0
324324
}])
325325
})
326+
327+
it('works with ipfs', () => {
328+
expect(
329+
multiaddr('/ip4/0.0.0.0/utp/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC').protos()
330+
).to.be.eql([{
331+
code: 4,
332+
name: 'ip4',
333+
size: 32
334+
}, {
335+
code: 302,
336+
name: 'utp',
337+
size: 0
338+
}, {
339+
code: 421,
340+
name: 'ipfs',
341+
size: -1
342+
}])
343+
})
326344
})
327345

328346
describe('.tuples', () => {

0 commit comments

Comments
 (0)