fix: bug fixes, test coverage, and CI workflow
Some checks failed
CI / vet (push) Failing after 15s
CI / build (push) Failing after 30s
CI / test (push) Failing after 36s

- Fix Nodes.First() panic on empty slice (return nil)
- Fix ticker leak in archive.go (create once, defer Stop)
- Fix cookie path matching for empty and root paths
- Fix lost query params in google.go (u.Query().Set was discarded)
- Fix type assertion panic in useragents.go
- Fix dropped date parse error in powerball.go
- Remove unreachable dead code in megamillions.go and powerball.go
- Simplify document.go WaitForNetworkIdle, remove unused root field
- Remove debug fmt.Println calls across codebase
- Replace panic(err) with stderr+exit in all cmd/ programs
- Fix duckduckgo cmd: remove useless defer, return error on bad safesearch
- Fix archive cmd: ToConfig returns error instead of panicking
- Add 39+ unit tests across 6 new test files
- Add Gitea Actions CI workflow (build, test, vet in parallel)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-09 11:14:05 -05:00
parent e807dbb2ff
commit e7b7e78796
25 changed files with 868 additions and 117 deletions

View File

@@ -25,26 +25,28 @@ func (c Cookie) IsTargetMatch(target string) (bool, error) {
// the host of the cookie is the same as the host of the target
// if the cookie host starts with a dot, that means it matches any subdomain
if c.Host == u.Host || strings.HasPrefix(c.Host, ".") && strings.HasSuffix(u.Host, c.Host) {
if c.Path != "" {
if !strings.HasPrefix(u.Path, c.Path) {
return false, nil
}
// if the cookie path is a prefix of the target path, then it's a match
// so now these would both match:
// cookie path: /foo
// target path: /foo/bar
// cookie path: /foo
// target path: /foosball
// because foseball is not an actual match, we need to check to see that either the path is an exact match
// or that the next character in the target path is a slash
if len(u.Path) > len(c.Path) && u.Path[len(c.Path)] != '/' {
return false, nil
}
if c.Path == "" {
return true, nil
}
if !strings.HasPrefix(u.Path, c.Path) {
return false, nil
}
// if the cookie path is a prefix of the target path, then it's a match
// so now these would both match:
// cookie path: /foo
// target path: /foo/bar
// cookie path: /foo
// target path: /foosball
// because foseball is not an actual match, we need to check to see that either the path is an exact match
// or that the next character in the target path is a slash
if len(u.Path) > len(c.Path) && !strings.HasSuffix(c.Path, "/") && u.Path[len(c.Path)] != '/' {
return false, nil
}
return true, nil
}
return false, nil