diff options
| author | 2026-03-22 23:23:32 +0000 | |
|---|---|---|
| committer | 2026-03-22 23:23:32 +0000 | |
| commit | 98231f518208f77ee6e92291976a1512ad1da282 (patch) | |
| tree | 9f82a593c47d35999ee38117c6501b2aeef6bf15 | |
| parent | *: Fixup ownership of compositional backends (diff) | |
| signature | No signature | |
refstore/files: UB on use after close
| -rw-r--r-- | refstore/files/close.go | 1 | ||||
| -rw-r--r-- | refstore/files/transaction.go | 5 | ||||
| -rw-r--r-- | refstore/files/transaction_abort.go | 21 | ||||
| -rw-r--r-- | refstore/files/transaction_commit.go | 15 | ||||
| -rw-r--r-- | refstore/files/transaction_queue.go | 7 |
5 files changed, 5 insertions, 44 deletions
diff --git a/refstore/files/close.go b/refstore/files/close.go index 6dfe3668..58f400a5 100644 --- a/refstore/files/close.go +++ b/refstore/files/close.go @@ -3,6 +3,7 @@ package files // Close releases resources associated with the store. // // Store borrows gitRoot, so Close does not close it. +// Transactions and batches borrowing the store are invalid after Close. // // Repeated calls to Close are undefined behavior. func (store *Store) Close() error { diff --git a/refstore/files/transaction.go b/refstore/files/transaction.go index 09b92caf..b3132d3e 100644 --- a/refstore/files/transaction.go +++ b/refstore/files/transaction.go @@ -5,9 +5,8 @@ import ( ) type Transaction struct { - store *Store - ops []txOp - closed bool + store *Store + ops []txOp } var _ refstore.Transaction = (*Transaction)(nil) diff --git a/refstore/files/transaction_abort.go b/refstore/files/transaction_abort.go index 7b92472c..cb82e4bf 100644 --- a/refstore/files/transaction_abort.go +++ b/refstore/files/transaction_abort.go @@ -1,22 +1,3 @@ package files -import "fmt" - -func (tx *Transaction) Abort() error { - err := tx.ensureOpen() - if err != nil { - return err - } - - tx.closed = true - - return nil -} - -func (tx *Transaction) ensureOpen() error { - if tx.closed { - return fmt.Errorf("refstore/files: transaction already closed") - } - - return nil -} +func (tx *Transaction) Abort() error { return nil } diff --git a/refstore/files/transaction_commit.go b/refstore/files/transaction_commit.go index eba959cb..dae4d8ee 100644 --- a/refstore/files/transaction_commit.go +++ b/refstore/files/transaction_commit.go @@ -6,15 +6,8 @@ import ( ) func (tx *Transaction) Commit() error { - err := tx.ensureOpen() - if err != nil { - return err - } - prepared, err := tx.prepare() if err != nil { - tx.closed = true - return err } @@ -29,16 +22,12 @@ func (tx *Transaction) Commit() error { err = tx.writeLoose(item) if err != nil { - tx.closed = true - return err } } err = tx.applyPackedDeletes(prepared) if err != nil { - tx.closed = true - return err } @@ -48,8 +37,6 @@ func (tx *Transaction) Commit() error { if item.target.ref.isLoose { err = tx.store.rootFor(item.target.loc.root).Remove(item.target.loc.path) if err != nil && !errors.Is(err, os.ErrNotExist) { - tx.closed = true - return err } @@ -59,7 +46,5 @@ func (tx *Transaction) Commit() error { } } - tx.closed = true - return nil } diff --git a/refstore/files/transaction_queue.go b/refstore/files/transaction_queue.go index 59b49419..0000bc27 100644 --- a/refstore/files/transaction_queue.go +++ b/refstore/files/transaction_queue.go @@ -1,12 +1,7 @@ package files func (tx *Transaction) queue(op txOp) error { - err := tx.ensureOpen() - if err != nil { - return err - } - - err = tx.validateOp(op) + err := tx.validateOp(op) if err != nil { return err } |
