saur-git

LOW
maintainer josefandersson 0 votes scanned 2026-09-17 00:27:14.276658
View on AUR
Why flagged

The source is a Git repository from the maintainer's own domain, used to build the project from source; this is normal for a -git AUR package, and the host, while not standard, is plausibly project-owned.

Triggered rules

Low AI review downgraded a static finding llm_review

The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The source is a Git repository from the maintainer's own domain, used to build the project from source; this is normal for a -git AUR package, and the host, while not standard, is plausibly project-owned.

1 higher static finding superseded - not the current verdict (shown for transparency)
Medium source=() URL on a non-standard host source_untrusted_domain

One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).

  • PKGBUILD:22 source=("${_binname}::git+https://git.josf.dev/josefandersson/saur.git")

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: Josef Andersson <josefandersson@tuta.io>
2#
3# Builds the saur binary from source with bun and installs it. This is a VCS (-git) package;
4# update `url`/`source` to the published repo before uploading to the AUR.
5
6pkgname=saur-git
7_binname=saur
8pkgver=1.4.0
9pkgrel=1
10pkgdesc="A safer AUR helper with Claude security review baked in"
11arch=('x86_64' 'aarch64')
12url="https://git.josf.dev/josefandersson/saur"
13license=('MIT')
14depends=('claude-code') # runtime: the `claude` CLI (authenticated)
15makedepends=('bun' 'git')
16provides=('saur')
17conflicts=('saur')
18# Do NOT strip: this is a bun standalone executable with the app bundle appended after the ELF.
19# `strip` (which makepkg runs by default) corrupts that trailer, so the binary falls back to bun's
20# own CLI — `saur update` then runs `bun update`. Keep the compiled binary intact.
21options=('!strip')
22source=("${_binname}::git+https://git.josf.dev/josefandersson/saur.git")
23sha256sums=('SKIP')
24
25pkgver() {
26 cd "$_binname"
27 printf "%s.r%s.g%s" \
28 "$(awk -F'\"' '/"version"/{print $4; exit}' package.json)" \
29 "$(git rev-list --count HEAD)" \
30 "$(git rev-parse --short HEAD)"
31}
32
33build() {
34 cd "$_binname"
35 bun install --frozen-lockfile
36 bun build src/main.ts --compile --outfile "$_binname"
37}
38
39check() {
40 cd "$_binname"
41 bun test
42 # Guard: a corrupt/miscompiled standalone binary falls back to bun's OWN CLI, so saur's
43 # `install`/`update` subcommands would run `bun install`/`bun update` (this shipped in the
44 # v1.0.0 saur-bin). A good build answers `--version` with `saur <ver>`; anything else means
45 # bun couldn't find the embedded app — fail the build rather than install a hijacked binary.
46 ./"$_binname" --version | grep -q '^saur ' || {
47 echo "saur: compiled binary is hijacked by the bun runtime (embedded app not found);" >&2
48 echo " this build is corrupt. Try a different bun version and rebuild." >&2
49 return 1
50 }
51}
52
53package() {
54 cd "$_binname"
55 install -Dm755 "$_binname" "$pkgdir/usr/bin/$_binname"
56 install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
57 install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
58}
59

Scan history

Scanned at (UTC)SeverityRules
2026-09-17 00:27:14 Low 2
2026-09-16 00:03:17 Low 2
2026-09-15 00:25:31 Low 2
2026-09-14 00:27:57 Low 2
2026-09-13 00:19:54 Low 2
2026-09-12 00:25:17 Low 2
2026-09-11 00:19:22 Low 2
2026-09-10 00:22:44 Low 2
2026-09-09 00:04:09 Low 2
2026-09-08 00:18:08 Low 2
2026-09-07 00:30:15 Low 2
2026-09-06 00:17:06 Low 2
2026-09-05 00:16:27 Low 2
2026-09-04 00:03:13 Low 2
2026-09-03 00:15:47 Low 2
2026-09-02 00:02:31 Low 2
2026-09-01 00:11:19 Low 2
2026-08-31 00:19:57 Low 2
2026-08-30 00:04:14 Low 2
2026-08-29 00:29:17 Low 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion