voicevox-engine
Triggered rules
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:27
venv/bin/pip install kanalizer pyopenjtalk
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD has two genuine supply-chain concerns: (1) It downloads a prebuilt binary 7z archive from GitHub releases (voicevox_engine-linux-cpu-x64-${pkgver}.7z.001) containing shared libraries (libonnxruntime.so, libvoicevox_core.so) that will be installed and executed. While GitHub releases from the official VOICEVOX project is a legitimate upstream source, these are prebuilt native binaries with checksums, which is a real but moderate risk. (2) It runs 'pip install kanalizer pyopenjtalk' from PyPI without pinning versions or verifying checksums, meaning any future compromise of those PyPI packages would affect users. The kanalizer and pyopenjtalk packages are then installed into the final package. The open_jtalk dictionary is from r9y9's GitHub releases (the pyopenjtalk maintainer), which is the canonical source. Overall: prebuilt native .so files from official upstream + unpinned pip installs of PyPI packages constitute a real medium-severity supply-chain concern, not a false positive, though there is no evidence of active malice.
PKGBUILD
1 offending line(s) highlighted
pkgname=voicevox-engine
pkgver=0.24.1
pkgrel=1
pkgdesc='A http server for text-to-speech'
arch=('x86_64')
license=('LGPL-3.0-only+nonfree')
url=https://github.com/VOICEVOX/voicevox_engine
_syspymods=(fastapi importlib-metadata jaraco.text jinja markupsafe numpy platformdirs pydantic pydantic-core python-multipart semver soxr soundfile yaml
pyworld) #AUR
depends=(python ${_syspymods[@]/#/python-})
makedepends=(python-{build,setuptools,installer})
source=("${url}/archive/refs/tags/${pkgver}.tar.gz"
https://github.com/r9y9/open_jtalk/releases/download/v1.11.1/open_jtalk_dic_utf_8-1.11.tar.gz
#${url}/releases/download/${pkgver}/voicevox_engine-linux-nvidia-${pkgver}.7z.00{1,2}
${url}/releases/download/${pkgver}/voicevox_engine-linux-cpu-x64-${pkgver}.7z.001) # should be built from src
noextract=(*.7z.*)
sha256sums=('0488d3b98b4e2876c3070c2287347df92cacf724f0e986c60cad7aabffb6cf7e'
'fe6ba0e43542cef98339abdffd903e062008ea170b04e7e2a35da805902f382a'
'edc810a1a2a0540b4e38abfeb6b08e9284fa06508f1d1cab6c2379260645aa11')
build(){
bsdtar -xf voicevox_engine-linux-cpu-x64-${pkgver}.7z.001 linux-cpu-x64/{*.json,libonnxruntime.so,libvoicevox_core.so,*.json,model,resources}
# buldle missing modules as a workaround
python -m venv venv --system-site-packages
venv/bin/pip install kanalizer pyopenjtalk
cd ${pkgname/-/_}-$pkgver
rm -rf resources # avoid build err. non production engine
python -m build --wheel --no-isolation
}
package() {
python -m installer --destdir="$srcdir" voicevox_engine-${pkgver}/dist/*.whl
install -d "$pkgdir"/usr/lib/VOICEVOX
mv linux-cpu-x64 "$pkgdir"/usr/lib/VOICEVOX/vv-engine
mv usr/lib/python*/site-packages/* -t "$pkgdir"/usr/lib/VOICEVOX/vv-engine
mv venv/lib/python*/site-packages/{kanalizer,pyopenjtalk}* -t "$pkgdir"/usr/lib/VOICEVOX/vv-engine
mv open_jtalk* -t "$pkgdir"/usr/lib/VOICEVOX/vv-engine/pyopenjtalk
sed '1c#!/usr/bin/python' voicevox_engine-${pkgver}/run.py | install -Dm755 /dev/stdin "$pkgdir"/usr/lib/VOICEVOX/vv-engine/run
}
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 |