diff --git a/packages/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts b/packages/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts index 0e2250f3..55588bcc 100644 --- a/packages/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts +++ b/packages/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts @@ -45,7 +45,15 @@ const unixFsResolver: Resolver = async (cid, name, path, toResolve, resolve, dep } const block = await toBuffer(blockstore.get(cid, options)) - const node = decode(block) + let node: PBNode + + try { + node = decode(block) + } catch (err: any) { + // badly formatted or invalid protobuf + throw new NotUnixFSError(err.message) + } + let unixfs let next diff --git a/packages/ipfs-unixfs-exporter/test/exporter.spec.ts b/packages/ipfs-unixfs-exporter/test/exporter.spec.ts index f915b6c1..58c09caf 100644 --- a/packages/ipfs-unixfs-exporter/test/exporter.spec.ts +++ b/packages/ipfs-unixfs-exporter/test/exporter.spec.ts @@ -1737,4 +1737,14 @@ describe('exporter', () => { expect(basicfile).to.not.have.property('unixfs') expect(basicfile).to.not.have.property('content') }) + + it('should throw NotUnixFSError when data is not parseable', async () => { + const buf = uint8ArrayFromString('i am not a protobuf') + const mh = await sha256.digest(buf) + const cid = CID.createV1(dagPb.code, mh) + await block.put(cid, buf) + + await expect(exporter(cid, block)).to.eventually.be.rejected + .with.property('name', 'NotUnixFSError') + }) })