From f30e3dff696b92592c17c3696b43e9b60dc73cd6 Mon Sep 17 00:00:00 2001 From: daixiheguu Date: Wed, 5 Aug 2026 01:09:43 +0800 Subject: [PATCH] fix(group): fix(group): reject string representations of zero This PR fixes zero-value validation in `Group.addMember()` and --- packages/group/src/index.ts | 16 +++++++++------- packages/group/tests/index.test.ts | 11 +++++++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/group/src/index.ts b/packages/group/src/index.ts index ece5c573d..53ca30181 100644 --- a/packages/group/src/index.ts +++ b/packages/group/src/index.ts @@ -72,11 +72,13 @@ export class Group { * @param member The new member to be added. */ public addMember(member: BigNumber) { - if (member === 0n || member === "0") { + const normalizedMember = BigInt(member) + + if (normalizedMember === 0n) { throw new Error("Failed to add member: value cannot be 0") } - this.leanIMT.insert(BigInt(member)) + this.leanIMT.insert(normalizedMember) } /** @@ -84,13 +86,13 @@ export class Group { * @param members New members. */ public addMembers(members: BigNumber[]) { - for (const member of members) { - if (member === 0n || member === "0") { - throw new Error("Failed to add member: value cannot be 0") - } + const normalizedMembers = members.map(BigInt) + + if (normalizedMembers.some((member) => member === 0n)) { + throw new Error("Failed to add member: value cannot be 0") } - this.leanIMT.insertMany(members.map(BigInt)) + this.leanIMT.insertMany(normalizedMembers) } /** diff --git a/packages/group/tests/index.test.ts b/packages/group/tests/index.test.ts index 6eb5cd8e1..bf9b616b8 100644 --- a/packages/group/tests/index.test.ts +++ b/packages/group/tests/index.test.ts @@ -1,5 +1,7 @@ import { Group } from "../src" +const zeroMembers = [0n, "0", "00", "+0", "-0", "0x0", "0o0", "0b0", " 0 ", "", " "] as const + describe("Group", () => { describe("# Group", () => { it("Should create a group", () => { @@ -42,10 +44,10 @@ describe("Group", () => { expect(group.size).toBe(1) }) - it("Should not add a member to a group if its value is 0", () => { + it.each(zeroMembers)("Should not add a member to a group if %p represents 0", (member) => { const group = new Group() - const fun = () => group.addMember(0n) + const fun = () => group.addMember(member) expect(fun).toThrow("Failed to add member: value cannot be 0") }) @@ -60,12 +62,13 @@ describe("Group", () => { expect(group.size).toBe(2) }) - it("Should not add many members to a group if any value is 0", () => { + it.each(zeroMembers)("Should not add many members to a group if %p represents 0", (member) => { const group = new Group() - const fun = () => group.addMembers([1n, 0n]) + const fun = () => group.addMembers([1n, member, 3n]) expect(fun).toThrow("Failed to add member: value cannot be 0") + expect(group.members).toEqual([]) }) })