From c14eb43605fb0493563c3e50af22008023a39842 Mon Sep 17 00:00:00 2001 From: Alexandr Stelnykovych Date: Wed, 3 Sep 2025 12:44:43 +0300 Subject: [PATCH] fix: Improve error handling for malformed records in SQLite storage --- base/database/storage/errors.go | 3 ++- base/database/storage/sqlite/prepared.go | 12 ++++++------ base/database/storage/sqlite/sqlite.go | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/base/database/storage/errors.go b/base/database/storage/errors.go index ecc28530..f8534046 100644 --- a/base/database/storage/errors.go +++ b/base/database/storage/errors.go @@ -4,5 +4,6 @@ import "errors" // Errors for storages. var ( - ErrNotFound = errors.New("storage entry not found") + ErrNotFound = errors.New("storage entry not found") + ErrRecordMalformed = errors.New("record is malformed") ) diff --git a/base/database/storage/sqlite/prepared.go b/base/database/storage/sqlite/prepared.go index 47052413..b109a64b 100644 --- a/base/database/storage/sqlite/prepared.go +++ b/base/database/storage/sqlite/prepared.go @@ -2,16 +2,16 @@ package sqlite import ( "context" - "errors" + "fmt" "strconv" + "github.com/safing/portmaster/base/database/record" + "github.com/safing/portmaster/base/database/storage" + "github.com/safing/portmaster/base/database/storage/sqlite/models" + "github.com/safing/structures/dsd" "github.com/stephenafamo/bob" "github.com/stephenafamo/bob/dialect/sqlite/im" "github.com/stephenafamo/bob/expr" - - "github.com/safing/portmaster/base/database/record" - "github.com/safing/portmaster/base/database/storage/sqlite/models" - "github.com/safing/structures/dsd" ) var UsePreparedStatements bool = true @@ -91,7 +91,7 @@ func writeWithPreparedStatement(ctx context.Context, pStmt *bob.StdPrepared, r r if r.IsWrapped() { wrapper, ok := r.(*record.Wrapper) if !ok { - return errors.New("record is malformed (reports to be wrapped but is not of type *record.Wrapper)") + return fmt.Errorf("%w: reports to be wrapped but is not of type *record.Wrapper", storage.ErrRecordMalformed) } format, ok = dsd.ValidateSerializationFormat(wrapper.Format) if !ok { diff --git a/base/database/storage/sqlite/sqlite.go b/base/database/storage/sqlite/sqlite.go index 3e3f1e5c..2a54cfa8 100644 --- a/base/database/storage/sqlite/sqlite.go +++ b/base/database/storage/sqlite/sqlite.go @@ -168,7 +168,7 @@ func (db *SQLite) putRecord(r record.Record, tx *bob.Tx) (record.Record, error) if r.IsWrapped() { wrapper, ok := r.(*record.Wrapper) if !ok { - return nil, errors.New("record is malformed (reports to be wrapped but is not of type *record.Wrapper)") + return nil, fmt.Errorf("%w: reports to be wrapped but is not of type *record.Wrapper", storage.ErrRecordMalformed) } format, ok = dsd.ValidateSerializationFormat(wrapper.Format) if !ok {