fix(qa): reject loose gateway RSS samples · openclaw/openclaw@331cc6a
vincentkoc
·
2026-06-17
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -899,8 +899,17 @@ function readProcessRssMb(pid: number | undefined): number | null {
|
899 | 899 | if (result.status !== 0) { |
900 | 900 | return null; |
901 | 901 | } |
902 | | -const rssKb = Number.parseInt(result.stdout.trim(), 10); |
903 | | -return Number.isFinite(rssKb) && rssKb > 0 ? rssKb / 1024 : null; |
| 902 | +const rssKb = parseProcessRssKb(result.stdout); |
| 903 | +return rssKb === null ? null : rssKb / 1024; |
| 904 | +} |
| 905 | + |
| 906 | +function parseProcessRssKb(raw: string): number | null { |
| 907 | +const value = raw.trim(); |
| 908 | +if (!/^[1-9][0-9]*$/u.test(value)) { |
| 909 | +return null; |
| 910 | +} |
| 911 | +const rssKb = Number(value); |
| 912 | +return Number.isSafeInteger(rssKb) ? rssKb : null; |
904 | 913 | } |
905 | 914 | |
906 | 915 | function readProcessFdCount(pid: number | undefined): number | null { |
@@ -1783,6 +1792,7 @@ export const testing = {
|
1783 | 1792 | parseNonNegativeInt, |
1784 | 1793 | parseOptions, |
1785 | 1794 | parsePositiveInt, |
| 1795 | + parseProcessRssKb, |
1786 | 1796 | resolveRestartDeadlineFailure, |
1787 | 1797 | resolveEntry, |
1788 | 1798 | resolvePhaseDeadlineAt, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -774,8 +774,17 @@ function readProcessRssMb(pid: number | undefined): number | null {
|
774 | 774 | if (result.status !== 0) { |
775 | 775 | return null; |
776 | 776 | } |
777 | | -const rssKb = Number.parseInt(result.stdout.trim(), 10); |
778 | | -return Number.isFinite(rssKb) && rssKb > 0 ? rssKb / 1024 : null; |
| 777 | +const rssKb = parseProcessRssKb(result.stdout); |
| 778 | +return rssKb === null ? null : rssKb / 1024; |
| 779 | +} |
| 780 | + |
| 781 | +function parseProcessRssKb(raw: string): number | null { |
| 782 | +const value = raw.trim(); |
| 783 | +if (!/^[1-9][0-9]*$/u.test(value)) { |
| 784 | +return null; |
| 785 | +} |
| 786 | +const rssKb = Number(value); |
| 787 | +return Number.isSafeInteger(rssKb) ? rssKb : null; |
779 | 788 | } |
780 | 789 | |
781 | 790 | function parsePsCpuTimeMs(raw: string): number | null { |
@@ -1103,6 +1112,7 @@ export const testing = {
|
1103 | 1112 | parseOptions, |
1104 | 1113 | parseNonNegativeInt, |
1105 | 1114 | parsePositiveInt, |
| 1115 | + parseProcessRssKb, |
1106 | 1116 | resolveEntry, |
1107 | 1117 | sanitizedEnv, |
1108 | 1118 | stopChild, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -173,6 +173,14 @@ node 1234 user 12u IPv4 0t0 TCP localhost:1234
|
173 | 173 | ).toBe(3); |
174 | 174 | }); |
175 | 175 | |
| 176 | +it("rejects malformed ps RSS samples", () => { |
| 177 | +expect(testing.parseProcessRssKb("4096\n")).toBe(4096); |
| 178 | +expect(testing.parseProcessRssKb("4096kb\n")).toBeNull(); |
| 179 | +expect(testing.parseProcessRssKb("4096 8192\n")).toBeNull(); |
| 180 | +expect(testing.parseProcessRssKb("0\n")).toBeNull(); |
| 181 | +expect(testing.parseProcessRssKb("")).toBeNull(); |
| 182 | +}); |
| 183 | + |
176 | 184 | it("enables both startup and restart trace in the child gateway environment", () => { |
177 | 185 | const env = testing.sanitizedEnv("/tmp/openclaw-bench", "/tmp/openclaw-bench/config.json", { |
178 | 186 | config: {}, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -94,6 +94,14 @@ describe("gateway startup benchmark script", () => {
|
94 | 94 | expect(env.OPENCLAW_GATEWAY_STARTUP_TRACE).toBe("1"); |
95 | 95 | }); |
96 | 96 | |
| 97 | +it("rejects malformed ps RSS samples", () => { |
| 98 | +expect(testing.parseProcessRssKb("2048\n")).toBe(2048); |
| 99 | +expect(testing.parseProcessRssKb("2048kb\n")).toBeNull(); |
| 100 | +expect(testing.parseProcessRssKb("2048 4096\n")).toBeNull(); |
| 101 | +expect(testing.parseProcessRssKb("0\n")).toBeNull(); |
| 102 | +expect(testing.parseProcessRssKb("")).toBeNull(); |
| 103 | +}); |
| 104 | + |
97 | 105 | it("classifies HTTP listen and gateway ready logs separately", () => { |
98 | 106 | expect( |
99 | 107 | testing.classifyGatewayReadyLog("[gateway] http server listening (0 plugins, 0.8s)"), |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。