openttd-n-ice
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.
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-09-17 00:27:14 | Medium | 2 |
| 2026-09-16 00:03:17 | Medium | 2 |
| 2026-09-15 00:25:31 | Medium | 2 |
| 2026-09-14 00:27:57 | Medium | 2 |
| 2026-09-13 00:19:54 | Medium | 2 |
| 2026-09-12 00:25:17 | Medium | 2 |
| 2026-09-11 00:19:22 | Medium | 2 |
| 2026-09-10 00:22:44 | Medium | 2 |
| 2026-09-09 00:04:09 | Medium | 2 |
| 2026-09-08 00:18:08 | Medium | 2 |
| 2026-09-07 00:30:15 | Medium | 2 |
| 2026-09-06 00:17:06 | Medium | 2 |
| 2026-09-05 00:16:27 | Medium | 2 |
| 2026-09-04 00:03:13 | Medium | 2 |
| 2026-09-03 00:15:47 | Medium | 2 |
| 2026-09-02 00:02:31 | Medium | 2 |
| 2026-09-01 00:11:19 | Medium | 2 |
| 2026-08-31 00:19:57 | Medium | 2 |
| 2026-08-30 00:04:14 | Medium | 2 |
| 2026-08-29 00:29:17 | Medium | 2 |