From 82d16fb6b59e94352d328639dc6e1ad402376c0b Mon Sep 17 00:00:00 2001 From: blackflytech Date: Tue, 30 Jun 2026 01:20:02 +0800 Subject: [PATCH] fix(op-preimage): preserve read and write close errors Signed-off-by: blackflytech --- op-preimage/filechan.go | 4 ++-- op-preimage/filechan_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 op-preimage/filechan_test.go diff --git a/op-preimage/filechan.go b/op-preimage/filechan.go index 3d844c58b6b..efb0fba139f 100644 --- a/op-preimage/filechan.go +++ b/op-preimage/filechan.go @@ -46,10 +46,10 @@ func (rw *ReadWritePair) Writer() *os.File { func (rw *ReadWritePair) Close() error { var combinedErr error if err := rw.r.Close(); err != nil { - combinedErr = errors.Join(fmt.Errorf("failed to close reader: %w", err)) + combinedErr = errors.Join(combinedErr, fmt.Errorf("failed to close reader: %w", err)) } if err := rw.w.Close(); err != nil { - combinedErr = errors.Join(fmt.Errorf("failed to close writer: %w", err)) + combinedErr = errors.Join(combinedErr, fmt.Errorf("failed to close writer: %w", err)) } return combinedErr } diff --git a/op-preimage/filechan_test.go b/op-preimage/filechan_test.go new file mode 100644 index 00000000000..eab32f929ef --- /dev/null +++ b/op-preimage/filechan_test.go @@ -0,0 +1,25 @@ +package preimage + +import ( + "os" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestReadWritePairCloseJoinsReaderAndWriterErrors(t *testing.T) { + reader, err := os.CreateTemp(t.TempDir(), "reader") + require.NoError(t, err) + writer, err := os.CreateTemp(t.TempDir(), "writer") + require.NoError(t, err) + + require.NoError(t, reader.Close()) + require.NoError(t, writer.Close()) + + err = NewReadWritePair(reader, writer).Close() + require.Error(t, err) + + errMsg := err.Error() + require.Contains(t, errMsg, "failed to close reader") + require.Contains(t, errMsg, "failed to close writer") +}