fcitx5-chinese-addons-without-browser
The non-standard host (download.fcitx-im.org) hosts data files (py_stroke, py_table) used by the input method, which are not executable code; the worst case of a swapped source is limited to data tampering, not remote code execution, and the source is checksummed.
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 non-standard host (download.fcitx-im.org) hosts data files (py_stroke, py_table) used by the input method, which are not executable code; the worst case of a swapped source is limited to data tampering, not remote code execution, and the source is checksummed.
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:20
"https://download.fcitx-im.org/data/py_stroke-$_py_stroke_ver.tar.gz"
PKGBUILD
1 offending line(s) highlighted# Maintainer: Lu Xu <oliver_lew at outlook dot com>
# Contributor: 1654755689 <1654755689 at qq dot com>
_pkgname=fcitx5-chinese-addons
pkgname=${_pkgname}-without-browser
pkgver=5.1.13
pkgrel=1
_py_stroke_ver=20250329
_py_table_ver=20121124
pkgdesc='Addons related to Chinese, including IME previous bundled inside fcitx4, without webkit or webengine dependencies'
arch=('x86_64')
url='https://github.com/fcitx/fcitx5-chinese-addons'
license=('LGPL-2.1-or-later' 'Unicode-DFS-2016')
depends=('fcitx5-qt' 'libime' 'opencc' 'hicolor-icon-theme')
makedepends=('boost' 'extra-cmake-modules' 'fcitx5-lua' 'fmt' 'ninja')
optdepends=('fcitx5-lua: Lua and imeapi support from pinyin')
provides=(${_pkgname})
conflicts=(${_pkgname})
source=("${_pkgname}_${pkgver}.tar.gz"::"${url}/archive/refs/tags/${pkgver}.tar.gz"
"https://download.fcitx-im.org/data/py_stroke-$_py_stroke_ver.tar.gz"
"https://download.fcitx-im.org/data/py_table-$_py_table_ver.tar.gz")
sha256sums=('ee056e7ac31f5f9c242cee43f7ad8605e2cc188a7bbcc46f869332a49058244a'
'c1a7ca7225d3614ab83353fc827503006a980447762018f53760425d7b5303a6'
'42146ac97de6c13d55f9e99ed873915f4c66739e9c11532a34556badf9792c04')
noextract=("py_stroke-$_py_stroke_ver.tar.gz"
"py_table-$_py_table_ver.tar.gz")
prepare() {
cd ${_pkgname}-${pkgver}
mv ../py_stroke-$_py_stroke_ver.tar.gz modules/pinyinhelper/
mv ../py_table-$_py_table_ver.tar.gz modules/pinyinhelper/
# grep to make sure the version is correct
grep "PY_STROKE_VER $_py_stroke_ver" modules/pinyinhelper/CMakeLists.txt
grep "PY_TABLE_VER $_py_table_ver" modules/pinyinhelper/CMakeLists.txt
}
build() {
cd ${_pkgname}-${pkgver}
cmake -Wno-dev -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib \
-DENABLE_BROWSER=off .
ninja
}
package() {
cd ${_pkgname}-${pkgver}
install -Dm644 COPYING.unicode "${pkgdir}/usr/share/licenses/${pkgname}/Unicode-DFS-2016.txt"
DESTDIR="$pkgdir" ninja install
}
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 |