From 6a5c142fdd102d10ba0fa3cac90dd658cf597af1 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 10 Dec 2025 17:52:53 +0200 Subject: [PATCH] fix: handle invalid or corrupt protobuf data Ensure we throw an error with a better name than 'Error'. --- .../src/resolvers/unixfs-v1/index.ts | 10 +++++++++- packages/ipfs-unixfs-exporter/test/exporter.spec.ts | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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') + }) })