Skip to content

Commit f05a6c7

Browse files
authored
cannon: Ensure cannon temp files are removed before exiting. (#18312)
os.Exit doesn't run defer statements before exiting. So return cli.Exit error instead - still lets us set the error code and triggers an exit, but handled by urfave after the function has returned and defer statements have run.
1 parent 78ece5b commit f05a6c7

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

cannon/multicannon/exec.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"path/filepath"
1111

1212
"github.com/ethereum-optimism/optimism/cannon/mipsevm/versions"
13+
"github.com/urfave/cli/v2"
1314
)
1415

1516
// use the all directive to ensure the .gitkeep file is retained and avoid compiler errors
@@ -31,14 +32,12 @@ func ExecuteCannon(ctx context.Context, args []string, ver versions.StateVersion
3132
}
3233
cannonProgramPath, err := extractTempFile(filepath.Base(cannonProgramName), cannonProgramBin)
3334
if err != nil {
34-
fmt.Fprintf(os.Stderr, "Error extracting %s: %v\n", cannonProgramName, err)
35-
os.Exit(1)
35+
return cli.Exit(fmt.Sprintf("Error extracting %s: %v\n", cannonProgramName, err), 1)
3636
}
3737
defer os.Remove(cannonProgramPath)
3838

3939
if err := os.Chmod(cannonProgramPath, 0755); err != nil {
40-
fmt.Fprintf(os.Stderr, "Error setting execute permission for %s: %v\n", cannonProgramName, err)
41-
os.Exit(1)
40+
return cli.Exit(fmt.Sprintf("Error setting execute permission for %s: %v\n", cannonProgramName, err), 1)
4241
}
4342

4443
// nosemgrep: go.lang.security.audit.dangerous-exec-command.dangerous-exec-command
@@ -52,8 +51,7 @@ func ExecuteCannon(ctx context.Context, args []string, ver versions.StateVersion
5251
if err := cmd.Wait(); err != nil {
5352
var exitErr *exec.ExitError
5453
if errors.As(err, &exitErr) {
55-
// relay exit code to the parent process
56-
os.Exit(exitErr.ExitCode())
54+
return cli.Exit("", exitErr.ExitCode())
5755
} else {
5856
return fmt.Errorf("failed to wait for cannon-impl program: %w", err)
5957
}

0 commit comments

Comments
 (0)