From abc4f0f8b2a27c6d239ec5d1b52ded45ab533c38 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Wed, 11 Nov 2026 13:44:20 +0800 Subject: [PATCH] fix(android): validate DEX long syntax before conversion (#9909) Co-authored-by: Cursor Agent --- src/domain/android/androidAnalysis.ts | 7 +++++-- tests/boundary/android/JadxAnalysis.test.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/domain/android/androidAnalysis.ts b/src/domain/android/androidAnalysis.ts index e15ce2ec68..2e7be99b49 100644 --- a/src/domain/android/androidAnalysis.ts +++ b/src/domain/android/androidAnalysis.ts @@ -187,8 +187,11 @@ export const dexStaticValueSchema = z.discriminatedUnion("type", [ type: z.literal("long"), value: z .string() - .regex(/^(?:0|-?[1-9]\d*)$/u) - .refine((text) => BigInt(text) >= LONG_MIN && BigInt(text) <= LONG_MAX), + .regex(/^(?:0|-?[1-9]\d*)$/u, { abort: true }) + .refine((text) => { + const value = BigInt(text); + return value >= LONG_MIN && value <= LONG_MAX; + }), }), floating("float", Math.fround), floating("double", (value) => value), diff --git a/tests/boundary/android/JadxAnalysis.test.ts b/tests/boundary/android/JadxAnalysis.test.ts index c83b90b63a..1fb29abcf2 100644 --- a/tests/boundary/android/JadxAnalysis.test.ts +++ b/tests/boundary/android/JadxAnalysis.test.ts @@ -536,6 +536,7 @@ it("reports DEX static values of static final fields without a static initialize it.each([ { type: "long", value: -9223372036854775808 }, + { type: "long", value: "1.5" }, { type: "int", value: "1024" }, { type: "double", value: 0.5 }, { type: "enum", value: "fixture.Mode.ON" }, @@ -553,7 +554,13 @@ it.each([ dex_static_value, }, ]), - ).rejects.toThrow("JADX class summary failed or was malformed"); + ).rejects.toMatchObject({ + _tag: "AnalysisOutputError", + operation: "inspect_android_class", + message: expect.stringContaining( + "JADX class summary failed or was malformed", + ), + }); }, );