openttd-n-ice
Triggered rules
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=("https://cdn.$_pkgname.org/$_pkgname-releases/$pkgver/$_pkgname-$pkgver-source.tar.xz" -
PKGBUILD:23
"$pkgname-patches.zip::https://www.dropbox.com/s/pn8vepuxi26hj9x/${_pkgnamepretty}_${pkgver}_${_nice_release}_patch.zip?dl=1")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD downloads a patch archive from Dropbox (a personal/unofficial host) and applies it to the OpenTTD source before compiling. The Dropbox URL is mutable — the owner can swap the file at any time — and while a sha256sum is provided, that only protects against accidental corruption or a naive swap; it does not guarantee the content is trustworthy since the hash itself was supplied by the same maintainer. The patch is applied with `patch -p1 ... || true` (errors silently ignored), and a compiled binary plus a .grf data file from the same archive are installed. This is a classic medium-severity supply-chain concern: compiled code whose patch source is an unofficial, personally-controlled host rather than an upstream release mirror or VCS tag. The OpenTTD source itself comes from the official CDN with a checksum, so that part is fine. The risk is real but not evidence of active malice.
PKGBUILD
2 offending line(s) highlighted# Maintainer: entrix <invalid@invalid>
# Contributor: HeyCitizen <4637290+InTheMorning@users.noreply.github.com>
# Contributor: Vesa Kaihlavirta <vegai@iki.fi>
# Contributor: Hal Gentz <zegentzy@protonmail.com>
pkgname=openttd-n-ice
_pkgname=openttd
_pkgnamepretty=OpenTTD
_nice_release=122A
pkgver=12.2
pkgrel=1
pkgdesc='OpenTTD with n-ice patches.'
arch=('x86_64')
url='http://www.n-ice.org/openttd/forum/index.php?topic=609.msg3555'
license=('GPL')
depends=(fluidsynth fontconfig hicolor-icon-theme libpng)
optdepends=('openttd-opengfx: free graphics'
'openttd-openmsx: free musicset'
'openttd-opensfx: free soundset')
makedepends=('cmake' 'ninja')
source=("https://cdn.$_pkgname.org/$_pkgname-releases/$pkgver/$_pkgname-$pkgver-source.tar.xz"
"$pkgname-patches.zip::https://www.dropbox.com/s/pn8vepuxi26hj9x/${_pkgnamepretty}_${pkgver}_${_nice_release}_patch.zip?dl=1")
sha256sums=(
'81508f0de93a0c264b216ef56a05f8381fff7bffa6d010121a21490b4dace95c'
'6efe936b6ef605e60372ba565cf91c977eced7096bf4fdbd569af5607adfa56a')
conflicts=('openttd')
prepare() {
cd $_pkgname-$pkgver
sed -i '/sse/d;/SSE/d' CMakeLists.txt
patch -p1 < "../${_pkgnamepretty}_${pkgver}_${_nice_release}_patch/public_${_nice_release}.diff" || true
}
build() {
cmake \
-B build \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr \
-D CMAKE_INSTALL_BINDIR=bin \
-D CMAKE_INSTALL_DATADIR=/usr/share \
-G Ninja \
-S $_pkgname-$pkgver
ninja -C build
}
package() {
DESTDIR="$pkgdir" ninja -C build install
mkdir -p "${pkgdir}/usr/share/openttd/baseset/newgrf/"
install -m644 -D "${_pkgnamepretty}_${pkgver}_${_nice_release}_patch/newgrf/innerhighlight.grf" "${pkgdir}/usr/share/openttd/baseset/newgrf/innerhighlight.grf"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | MEDIUM | 2 |
| 2026-08-02 00:16:08 | MEDIUM | 2 |
| 2026-08-01 00:11:18 | MEDIUM | 2 |
| 2026-07-31 00:14:10 | MEDIUM | 2 |
| 2026-07-30 00:17:23 | MEDIUM | 2 |
| 2026-07-29 00:25:53 | MEDIUM | 2 |
| 2026-07-28 00:07:28 | MEDIUM | 2 |
| 2026-07-27 00:24:32 | MEDIUM | 2 |
| 2026-07-26 00:07:32 | MEDIUM | 2 |
| 2026-07-25 00:13:44 | MEDIUM | 2 |
| 2026-07-24 00:02:28 | MEDIUM | 2 |
| 2026-07-23 00:14:47 | MEDIUM | 2 |
| 2026-07-22 00:29:32 | MEDIUM | 2 |
| 2026-07-21 00:24:15 | MEDIUM | 2 |
| 2026-07-20 00:19:49 | MEDIUM | 2 |
| 2026-07-19 00:17:08 | MEDIUM | 2 |
| 2026-07-18 00:14:48 | MEDIUM | 2 |
| 2026-07-17 00:06:16 | MEDIUM | 2 |
| 2026-07-16 00:05:41 | MEDIUM | 2 |
| 2026-07-15 00:09:25 | MEDIUM | 2 |