@@ -151,10 +151,19 @@ func overwrite(name string, d []byte) error {
151151 if err != nil {
152152 return fmt .Errorf ("failed to create temp file: %w" , err )
153153 }
154+ success := false
155+ defer func () {
156+ if ! success {
157+ if err := os .Remove (tmpName ); err != nil {
158+ slog .WarnContext (context .Background (), "Failed to remove temporary file" , slog .String ("tmpname" , tmpName ), slog .Any ("error" , err ))
159+ }
160+ }
161+ }()
154162
155163 if err := os .Rename (tmpName , name ); err != nil {
156164 return fmt .Errorf ("failed to rename temporary file to target %q: %w" , name , err )
157165 }
166+ success = true
158167 return nil
159168 })
160169}
@@ -186,17 +195,31 @@ func createTemp(prefix string, d []byte) (name string, err error) {
186195 }
187196 }
188197
198+ tmpName := name
199+ success := false
200+ defer func () {
201+ if ! success {
202+ if err := os .Remove (tmpName ); err != nil {
203+ slog .WarnContext (context .Background (), "Failed to remove temporary file" , slog .String ("tmpname" , tmpName ), slog .Any ("error" , err ))
204+ }
205+ name = ""
206+ }
207+ }()
189208 defer func () {
190- if errC := f .Close (); errC != nil && err == nil {
191- err = errC
209+ if errC := f .Close (); errC != nil {
210+ if err == nil {
211+ err = errC
212+ }
213+ success = false
192214 }
193215 }()
194216
195- if n , err := f .Write (d ); err != nil {
196- return "" , fmt .Errorf ("failed to write to temporary file %q: %w" , name , err )
217+ if n , writeErr := f .Write (d ); writeErr != nil {
218+ return "" , fmt .Errorf ("failed to write to temporary file %q: %w" , name , writeErr )
197219 } else if l := len (d ); n < l {
198220 return "" , fmt .Errorf ("short write on %q, %d < %d" , name , n , l )
199221 }
200222
223+ success = true
201224 return name , nil
202225}
0 commit comments