From 75cc707dd049c52b82ff4e4d9ee4639cbabed9d1 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 14 Apr 2026 11:09:04 +0300 Subject: recordline: reject invalid uptime/bootTime (s3) Return ok=false when strconv.ParseUint fails instead of using zero values. Add tests for non-numeric and empty numeric fields. Made-with: Cursor --- internal/recordline/recordline.go | 10 ++++++++-- internal/recordline/recordline_test.go | 17 ++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'internal') diff --git a/internal/recordline/recordline.go b/internal/recordline/recordline.go index 940f235..077fa35 100644 --- a/internal/recordline/recordline.go +++ b/internal/recordline/recordline.go @@ -22,8 +22,14 @@ func Parse(line string) (Fields, bool) { if len(parts) != 3 { return Fields{}, false } - uptime, _ := strconv.ParseUint(parts[0], 10, 64) - bootTime, _ := strconv.ParseUint(parts[1], 10, 64) + uptime, err := strconv.ParseUint(parts[0], 10, 64) + if err != nil { + return Fields{}, false + } + bootTime, err := strconv.ParseUint(parts[1], 10, 64) + if err != nil { + return Fields{}, false + } osStr := parts[2] kernelName := osStr if i := strings.Index(osStr, " "); i > 0 { diff --git a/internal/recordline/recordline_test.go b/internal/recordline/recordline_test.go index 4fcc152..80eb955 100644 --- a/internal/recordline/recordline_test.go +++ b/internal/recordline/recordline_test.go @@ -54,17 +54,12 @@ func TestParse(t *testing.T) { }, true, }, - { - "abc:def:Linux 6.5.0", - Fields{ - Uptime: 0, - BootTime: 0, - OS: "Linux 6.5.0", - KernelName: "Linux", - KernelMajor: "Linux 6...", - }, - true, - }, + {"abc:def:Linux 6.5.0", Fields{}, false}, + {"abc:1700000000:Linux 6.5.0", Fields{}, false}, + {"12345:def:Linux 6.5.0", Fields{}, false}, + {":1:Linux", Fields{}, false}, + {"1::Linux", Fields{}, false}, + {" 0x10:1:Linux", Fields{}, false}, {"", Fields{}, false}, {" ", Fields{}, false}, {"only:two", Fields{}, false}, -- cgit v1.2.3