aboutsummaryrefslogtreecommitdiffhomepage
path: root/ldd
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-02-13 23:15:34 +0900
committerOphestra <cat@gensokyo.uk>2025-02-13 23:34:15 +0900
commitfe7d208cf76fa6f24bb9d12ba29b5ed61d837ce3 (patch)
treecac02af50a13b2078739a8f5a74d219f3b60833d /ldd
parent60c287375048b21eab2bd82f1e7d43e36dcfb3a2 (diff)
helper: use generic extra files interface
This replaces the pipes object and integrates context into helper process lifecycle. Signed-off-by: Ophestra <cat@gensokyo.uk>
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)
}