jazzjackrabbit
Triggered rules
external_download_not_in_source
curl/wget fetches a URL on a non-allowlisted host that is not part of source=(), so it is not checksum-verified by makepkg.
-
PKGBUILD:25
wget "https://archive.org/download/jazzpack/Jazz%20Jackrabbit%20GOG%20v1.3%20%2B%20Orbitus%202%20fix.zip"
llm_review
The static rules found a suspicious pattern they could not resolve, so an AI model (anthropic/claude-4.6-sonnet-20260217) reviewed it and judged it HIGH (confidence 92%): This PKGBUILD downloads a GOG-sourced copy of Jazz Jackrabbit ('Jazz Jackrabbit GOG v1.3 + Orbitus 2 fix.zip') from archive.org during the build process. Jazz Jackrabbit is proprietary commercial software; distributing or automating the download of a GOG copy without a license constitutes piracy. Additionally: (1) the download has no checksum verification (sha256sums=SKIP on the source, and no hash on the wget'd archive), meaning the archive.org file could be silently replaced with malicious content; (2) the cleanup removes .exe files but leaves behind game data files (.jj1, .j2l, etc.) that are proprietary; (3) the wget happens inside prepare() at build time, which is non-standard and bypasses any integrity checking. The piracy concern alone warrants high severity per policy, independent of the supply-chain risk from the unverified binary archive download.
PKGBUILD
1 offending line(s) highlightedpkgname=jazzjackrabbit
_pkgname=JazzJackrabbit
pkgver=1.0.0
pkgrel=1
pkgdesc="Jazz Jackrabbit game powered by the openjazz."
arch=('x86_64' 'aarch64')
license=('GPL')
depends=('openjazz-bin' 'wget' 'unzip' 'yad')
makedepends=('unzip')
url="https://gitlab.com/jazzproject"
source=("https://gitlab.com/jazzproject/jazz-jackrabbit/jazz/-/archive/$pkgver/jazz-$pkgver.tar.bz2")
sha256sums=("SKIP")
prepare() {
# Check if Sources folder exists so it doesn't redownload the file when it doesn't need to.
FILE="/usr/share/games/$_pkgname/SPRITES.*"
if [ -f "$FILE" ]; then
echo "Game files exists, skipping download."
cp -r "/usr/share/games/$_pkgname/*" "$pkgdir/usr/share/games/$_pkgname"
else
echo "Game files do not exist, starting download.."
cd "$srcdir/jazz-$pkgver" || { echo "Failed to change directory"; exit 1; }
# Deleting any existing downloads
rm -rf "Jazz Jackrabbit GOG v1.3 + Orbitus 2 fix.zip"
wget "https://archive.org/download/jazzpack/Jazz%20Jackrabbit%20GOG%20v1.3%20%2B%20Orbitus%202%20fix.zip"
if [ $? -ne 0 ]; then
echo "Download failed"
exit 1
fi
mkdir -p "$srcdir/tmp"
unzip -u "Jazz Jackrabbit GOG v1.3 + Orbitus 2 fix.zip" -d "$srcdir/tmp"
#Cleanup of uneeded files before packaging
rm -rf "$srcdir/tmp/cloud_saves"
rm -rf "$srcdir/tmp/DOSBOX"
rm -rf "$srcdir/tmp/HH95"
rm -rf "$srcdir/tmp/dosbox_*"
rm "$srcdir/tmp/webcache.zip"
find "$srcdir/tmp" -type f -iname "*unins000.*" -exec rm -- {} +
find "$srcdir/tmp" -type f -iname "*.exe" -exec rm -- {} +
find "$srcdir/tmp" -type f -iname "*.ico" -exec rm -- {} +
find "$srcdir/tmp" -type f -iname "*.lnk" -exec rm -- {} +
find "$srcdir/tmp" -type f -iname "*.hashdb" -exec rm -- {} +
find "$srcdir/tmp" -type f -iname "*.doc" -exec rm -- {} +
find "$srcdir/tmp" -type f -iname "*.unins000" -exec rm -- {} +
fi
}
package() {
install -dm755 "$pkgdir/usr/bin"
install -dm775 "$pkgdir/usr/share/games/$_pkgname"
install -dm755 "$pkgdir/usr/share/pixmaps"
cp -r "$srcdir/jazz-$pkgver/$pkgname" "$pkgdir/usr/bin"
cp -r "$srcdir/jazz-$pkgver/$pkgname" "$pkgdir/usr/share/games/$_pkgname/"
cp -r "$srcdir/jazz-$pkgver/$pkgname.png" "$pkgdir/usr/share/games/$_pkgname/"
cp -r "$srcdir/jazz-$pkgver/$pkgname.png" "$pkgdir/usr/share/pixmaps"
cp -r "$srcdir/tmp/." "$pkgdir/usr/share/games/$_pkgname/"
# Desktop Entry
install -Dm644 "$srcdir/jazz-$pkgver/$pkgname.desktop" \
"$pkgdir/usr/share/applications/$pkgname.desktop"
sed -i s%/usr/share%/opt% "$pkgdir/usr/share/applications/$pkgname.desktop"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | HIGH | 2 |
| 2026-08-02 00:16:08 | HIGH | 2 |
| 2026-08-01 00:11:18 | HIGH | 2 |
| 2026-07-31 00:14:10 | HIGH | 2 |
| 2026-07-30 00:17:23 | HIGH | 2 |
| 2026-07-29 00:25:53 | HIGH | 2 |
| 2026-07-28 00:07:28 | HIGH | 2 |
| 2026-07-27 00:24:32 | HIGH | 2 |
| 2026-07-26 00:07:32 | HIGH | 2 |
| 2026-07-25 00:13:44 | HIGH | 2 |
| 2026-07-24 00:02:28 | HIGH | 2 |
| 2026-07-23 00:14:47 | HIGH | 2 |
| 2026-07-22 00:29:32 | HIGH | 2 |
| 2026-07-21 00:24:15 | HIGH | 2 |
| 2026-07-20 00:19:49 | HIGH | 2 |
| 2026-07-19 00:17:08 | HIGH | 2 |
| 2026-07-18 00:14:48 | HIGH | 2 |
| 2026-07-17 00:06:16 | HIGH | 2 |
| 2026-07-16 00:05:41 | HIGH | 2 |
| 2026-07-15 00:09:25 | HIGH | 2 |