aboutsummaryrefslogtreecommitdiffhomepage
path: root/ldd
diff options
context:
space:
mode:
Diffstat (limited to 'ldd')
-rw-r--r--ldd/exec.go24
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)
}