diff options
Diffstat (limited to 'ldd/exec.go')
| -rw-r--r-- | ldd/exec.go | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/ldd/exec.go b/ldd/exec.go index 47e20a82..d605b457 100644 --- a/ldd/exec.go +++ b/ldd/exec.go @@ -1,20 +1,19 @@ package ldd import ( - "fmt" + "context" "os" - "os/exec" "strings" + "time" "git.gensokyo.uk/security/fortify/helper" "git.gensokyo.uk/security/fortify/helper/bwrap" ) -func Exec(p string) ([]*Entry, error) { - var ( - h helper.Helper - cmd *exec.Cmd - ) +const lddTimeout = 2 * time.Second + +func Exec(ctx context.Context, p string) ([]*Entry, error) { + var h helper.Helper if b, err := helper.NewBwrap( (&bwrap.Config{ @@ -29,17 +28,20 @@ func Exec(p string) ([]*Entry, error) { ); err != nil { return nil, err } else { - cmd = b.Unwrap() h = b } - cmd.Stdout, cmd.Stderr = new(strings.Builder), os.Stderr - if err := h.Start(); err != nil { + stdout := new(strings.Builder) + h.Stdout(stdout).Stderr(os.Stderr) + + c, cancel := context.WithTimeout(ctx, lddTimeout) + defer cancel() + if err := h.Start(c, false); err != nil { return nil, err } if err := h.Wait(); err != nil { return nil, err } - return Parse(cmd.Stdout.(fmt.Stringer)) + return Parse(stdout) } |
