From 7292a5db4e96ffeb30697ce3308d47777bf7c2f5 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 18 Apr 2026 16:26:33 +0300 Subject: keepass: fix parseContent doc comment and add importBytes ctx note - Replace the inaccurate "Go compiler can optimise away" claim in parseContent's doc with an accurate explanation: callers that already hold a string pass it directly, while []byte callers make a single explicit conversion at the call site, keeping the conversion visible rather than hidden inside the function (100 Go Mistakes #40). - Add a comment in importBytes explaining why ctx is not threaded into addAttachment or addTextEntry: both are synchronous, purely in-memory operations with no I/O or blocking calls that could respect cancellation. Co-Authored-By: Claude Sonnet 4.6 --- internal/keepass/format.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'internal/keepass/format.go') diff --git a/internal/keepass/format.go b/internal/keepass/format.go index 98f5af1..bda4826 100644 --- a/internal/keepass/format.go +++ b/internal/keepass/format.go @@ -5,6 +5,7 @@ package keepass import ( + "bytes" "regexp" "strings" ) @@ -35,8 +36,12 @@ var ( // URL: // Notes: // +// +// Uses bytes.Buffer rather than strings.Builder to avoid the final +// []byte(builder.String()) allocation that would otherwise copy the result +// (100 Go Mistakes #40: unnecessary string/byte conversions). func formatContent(password, user, url, notes string) []byte { - var b strings.Builder + var b bytes.Buffer b.WriteString("Password: ") b.WriteString(password) b.WriteByte('\n') @@ -53,7 +58,7 @@ func formatContent(password, user, url, notes string) []byte { b.WriteByte('\n') } } - return []byte(b.String()) + return b.Bytes() } // parseContent is the inverse of formatContent. It tolerates missing or @@ -61,10 +66,16 @@ func formatContent(password, user, url, notes string) []byte { // before a "Notes:" header are matched against the password/user/url patterns; // everything after "Notes:" is collected verbatim. // +// The parameter is a string rather than []byte so that callers which already +// hold a string (the common case) pass it directly with no conversion. Callers +// that hold a []byte perform a single explicit string(b) conversion at the call +// site, making the conversion visible rather than hiding it inside this function +// (100 Go Mistakes #40). +// // This generalises extractPasswordFromContent from internal/cli/migrate_kdbx.go // to also handle User: and URL: fields. -func parseContent(content []byte) (password, user, url, notes string) { - lines := strings.Split(string(content), "\n") +func parseContent(content string) (password, user, url, notes string) { + lines := strings.Split(content, "\n") inNotes := false var notesLines []string -- cgit v1.2.3