fix: parse google meet cli numbers strictly · openclaw/openclaw@d23e4ae
steipete
·
2026-05-29
·
via Recent Commits to openclaw:main
File tree
extensions/google-meet/src
| Original file line number | Diff line number | Diff line change |
|---|
@@ -954,6 +954,27 @@ describe("google-meet CLI", () => {
|
954 | 954 | } |
955 | 955 | }); |
956 | 956 | |
| 957 | +it.each(["0x10", "1e3"])("rejects non-decimal listen timeouts: %s", async (timeoutMs) => { |
| 958 | +const testListen = vi.fn(); |
| 959 | + |
| 960 | +await expect( |
| 961 | +setupCli({ |
| 962 | +runtime: { testListen }, |
| 963 | +}).parseAsync( |
| 964 | +[ |
| 965 | +"googlemeet", |
| 966 | +"test-listen", |
| 967 | +"https://meet.google.com/abc-defg-hij", |
| 968 | +"--timeout-ms", |
| 969 | +timeoutMs, |
| 970 | +], |
| 971 | +{ from: "user" }, |
| 972 | +), |
| 973 | +).rejects.toThrow("timeout-ms must be a positive number"); |
| 974 | + |
| 975 | +expect(testListen).not.toHaveBeenCalled(); |
| 976 | +}); |
| 977 | + |
957 | 978 | it("prints a dry-run export manifest without writing files", async () => { |
958 | 979 | stubMeetArtifactsApi(); |
959 | 980 | const stdout = captureStdout(); |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -150,6 +150,7 @@ type GoogleMeetGatewayMethod =
|
150 | 150 | type GoogleMeetGatewayCallResult = { ok: true; payload: unknown } | { ok: false; error: unknown }; |
151 | 151 | |
152 | 152 | const GOOGLE_MEET_GATEWAY_DEFAULT_TIMEOUT_MS = 5000; |
| 153 | +const PLAIN_DECIMAL_NUMBER_RE = /^\d+(?:\.\d+)?$/; |
153 | 154 | |
154 | 155 | type DoctorOptions = { |
155 | 156 | json?: boolean; |
@@ -237,7 +238,8 @@ function parseOptionalNumber(value: string | undefined): number | undefined {
|
237 | 238 | if (!value?.trim()) { |
238 | 239 | return undefined; |
239 | 240 | } |
240 | | -const parsed = Number(value); |
| 241 | +const trimmed = value.trim(); |
| 242 | +const parsed = PLAIN_DECIMAL_NUMBER_RE.test(trimmed) ? Number(trimmed) : Number.NaN; |
241 | 243 | if (!Number.isFinite(parsed)) { |
242 | 244 | throw new Error(`Expected a numeric value, received ${value}`); |
243 | 245 | } |
@@ -263,7 +265,8 @@ function parsePositiveNumber(value: string | undefined, label: string): number |
|
263 | 265 | if (value === undefined) { |
264 | 266 | return undefined; |
265 | 267 | } |
266 | | -const parsed = Number(value); |
| 268 | +const trimmed = value.trim(); |
| 269 | +const parsed = PLAIN_DECIMAL_NUMBER_RE.test(trimmed) ? Number(trimmed) : Number.NaN; |
267 | 270 | if (!Number.isFinite(parsed) || parsed <= 0) { |
268 | 271 | throw new Error(`${label} must be a positive number`); |
269 | 272 | } |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。