frink-lang-bin
The package downloads the official JAR and data files from the project's own domain (frinklang.org), which is the legitimate source; the files are installed as-is and not executed during build, and the SKIP'd checksums are a packaging weakness but do not imply malicious content given the trusted context.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package downloads the official JAR and data files from the project's own domain (frinklang.org), which is the legitimate source; the files are installed as-is and not executed during build, and the SKIP'd checksums are a packaging weakness but do not imply malicious content given the trusted context.
1 higher static finding superseded - not the current verdict (shown for transparency)
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:13
"$pkgname.jar::https://frinklang.org/frinkjar/frink.jar"
PKGBUILD
1 offending line(s) highlighted# Maintainer: Alexis Williams <alexis@typedr.at>
pkgname=frink-lang-bin
pkgver=20240227
pkgrel=2
pkgdesc="A practical calculating tool and programming language."
arch=('any')
url="https://frinklang.org/"
license=('unknown')
depends=('bash' 'java-runtime')
makedepends=('awk' 'imagemagick' 'unzip')
optdepends=('rlwrap: readline support for the command-line shell')
source=(
"$pkgname.jar::https://frinklang.org/frinkjar/frink.jar"
"$pkgname-unitnames.txt::https://frinklang.org/frinkjar/unitnames.txt"
"$pkgname-functionnames.txt::https://frinklang.org/frinkjar/functionnames.txt"
)
noextract=("${source[@]%%::*}")
sha256sums=(
'SKIP'
'SKIP'
'SKIP'
)
pkgver() {
unzip -l "$srcdir/$pkgname.jar" | awk '/META-INF\/MANIFEST.MF/ { gsub("-",""); print $2 }';
}
build() {
unzip -p "$srcdir/$pkgname.jar" "data/icon.gif" > "$srcdir/$pkgname-icon.gif"
convert "$srcdir/$pkgname-icon.gif" -interpolate Nearest -filter point -resize '512x512' "$srcdir/$pkgname-icon.png"
}
package() {
mkdir -p "$pkgdir/usr/share/java/frink/";
cp "$srcdir/$pkgname.jar" "$pkgdir/usr/share/java/frink/frink.jar";
mkdir -p "$pkgdir/usr/share/frink/";
cp "$srcdir/$pkgname-unitnames.txt" "$pkgdir/usr/share/frink/unitnames.txt";
cp "$srcdir/$pkgname-functionnames.txt" "$pkgdir/usr/share/frink/functionnames.txt";
mkdir -p "$pkgdir/usr/bin/"
cat > "$pkgdir/usr/bin/frink" << 'EOF'
#!/bin/bash
CP=/usr/share/java/frink/frink.jar
rlwrap=$(command -v rlwrap)
rlwrap_args=""
if [ -n "${rlwrap}" ]
then
rlwrap_args="-f /usr/share/frink/unitnames.txt -b '$' -f /usr/share/frink/functionnames.txt"
fi
java_opts=(
"-Dawt.useSystemAAFontSettings=on"
"-Dswing.aatext=true"
"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
"-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
)
exec $rlwrap $rlwrap_args /usr/bin/java ${java_opts[*]} -cp $CP frink.gui.FrinkStarter "$@"
EOF
chmod a+x "$pkgdir/usr/bin/frink"
mkdir -p "$pkgdir/usr/share/icons/"
cp "$srcdir/$pkgname-icon.png" "$pkgdir/usr/share/icons/frink.png"
mkdir -p "$pkgdir/usr/share/applications/"
cat > "$pkgdir/usr/share/applications/frink.desktop" << 'EOF'
[Desktop Entry]
Type=Application
Version=1.0
Name=Frink
Comment=A practical calculating tool and programming language.
Exec=frink --gui
Icon=frink
Terminal=false
Categories=Utility;Science;Math;Calculator;Java
EOF
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 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 |