saur-git
maintainer josefandersson
· 0 votes
· scanned 2026-08-03 00:08:14.047287
LOW
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
6
pkgname=saur-git
7
_binname=saur
8
pkgver=1.4.0
9
pkgrel=1
10
pkgdesc="A safer AUR helper with Claude security review baked in"
11
arch=('x86_64' 'aarch64')
12
url="https://git.josf.dev/josefandersson/saur"
13
license=('MIT')
14
depends=('claude-code') # runtime: the `claude` CLI (authenticated)
15
makedepends=('bun' 'git')
16
provides=('saur')
17
conflicts=('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.
21
options=('!strip')
22
source=("${_binname}::git+https://git.josf.dev/josefandersson/saur.git")
23
sha256sums=('SKIP')
24
25
pkgver() {
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
33
build() {
34
cd "$_binname"
35
bun install --frozen-lockfile
36
bun build src/main.ts --compile --outfile "$_binname"
37
}
38
39
check() {
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
53
package() {
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
Changes since previous scan
--- PKGBUILD @ 2026-07-25 00:13+++ PKGBUILD @ 2026-08-03 00:08@@ -5,7 +5,7 @@ pkgname=saur-git _binname=saur-pkgver=1.2.0+pkgver=1.4.0 pkgrel=1 pkgdesc="A safer AUR helper with Claude security review baked in" arch=('x86_64' 'aarch64')Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 19:30:43 | MEDIUM | 1 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 09:14:00 | MEDIUM | 1 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 23:12:22 | MEDIUM | 1 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 00:14:48 | LOW | 2 |