mustang

maintainer zxp19821005 · 0 votes · scanned 2026-08-03 00:08:14.047287
LOW
View on AUR ↗
Why flagged The flagged pattern involves yarn install commands, but these are for building the project from its own source code cloned from the official GitHub repository, using locked dependencies via yarn.lock; the installs are part of a standard build process, not arbitrary external package injection.

Triggered rules

LOW AI review downgraded a static finding llm_review

The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The flagged pattern involves yarn install commands, but these are for building the project from its own source code cloned from the official GitHub repository, using locked dependencies via yarn.lock; the installs are part of a standard build process, not arbitrary external package injection.

1 higher static finding superseded - not the current verdict (shown for transparency)
MEDIUM npm/yarn/pnpm install of an undeclared external package npm_install_external

Runs `npm/yarn/pnpm install <package>` for a package not in source=(), pulling unpinned, unreviewed code at build time. Severity downgraded: the package declares/looks like a Node.js consumer, where build-time installs are expected.

  • PKGBUILD:103 NODE_ENV=development yarn add -D semver

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2pkgname=mustang
3_pkgname=Mustang
4pkgver=0.9.34
5_electronversion=41
6_nodever=24
7pkgrel=1
8pkgdesc="New full-featured desktop email, chat and video conference client.(Use system-wide electron)"
9arch=('any')
10url="https://mustang.im/"
11_ghurl="https://github.com/mustang-im/mustang"
12license=('EUPL-1.2')
13depends=(
14 "electron${_electronversion}"
15)
16makedepends=(
17 'npm'
18 'nvm'
19 'curl'
20 'gendesk'
21 'git'
22 'yarn'
23 'jq'
24)
25source=("${pkgname}.sh")
26sha256sums=('a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
27_ensure_local_nvm() {
28 local NVM_DIR="${srcdir}/.nvm"
29 source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
30 nvm install "${_nodever}"
31 nvm use "${_nodever}"
32}
33_get_app_dir() {
34 find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1
35}
36_set_build_env() {
37 export electronDist="/usr/lib/electron${_electronversion}"
38 export ELECTRON_SKIP_BINARY_DOWNLOAD=1
39 export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"
40 export HOME="${srcdir}/.electron-gyp"
41 mkdir -p "${srcdir}/.electron-gyp"
42 if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then
43 {
44 export YARN_REGISTRY="https://registry.npmmirror.com"
45 export ELECTRON_MIRROR="https://registry.npmmirror.com/-/binary/electron/"
46 export ELECTRON_BUILDER_BINARIES_MIRROR="https://registry.npmmirror.com/-/binary/electron-builder-binaries/"
47 export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"
48 export YARN_CACHE_FOLDER="${srcdir}/.yarn/cache"
49 export YARN_PLUGINS_FOLDER="${srcdir}/.yarn/plugins"
50 export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/global"
51 export YARN_USE_HARDLINKS=true
52 # export YARN_BUILD_FROM_SOURCE=true
53 export YARN_LINK_WORKSPACE_PACKAGES=true
54 export YARN_FETCH_RETRIES=3
55 export YARN_FETCH_RETRY_TIMEOUT=10000
56 export YARN_NETWORK_CONCURRENCY=32
57 }
58 find ./ -type f -name "yarn.lock" -exec sed -i "s/registry.yarnpkg.com/registry.npmmirror.com/g" {} +
59 fi
60}
61_get_electron_version() {
62 _elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \
63 -exec grep -l '"electron"' {} + | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null | head -1)
64 [[ -z "${_elec_ver}" ]] && return 1
65 echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
66}
67prepare() {
68 cd "${srcdir}"
69 if [[ ! -d "${srcdir}/${pkgname}-${pkgver}" ]]; then
70 git clone \
71 --depth 1 \
72 --branch "v${pkgver}" \
73 "${_ghurl}" \
74 "${pkgname}-${pkgver}"
75 fi
76 cd "${srcdir}/${pkgname}-${pkgver}"
77 _get_electron_version
78 sed -i -e "
79 s/@electronversion@/${_electronversion}/g
80 s/@appname@/${pkgname}/g
81 s/@runname@/app.asar/g
82 s/@cfgdirname@/${pkgname}/g
83 " "${srcdir}/${pkgname}.sh"
84 gendesk -q -f -n \
85 --pkgname="${pkgname}" \
86 --pkgdesc="${pkgdesc}" \
87 --categories="Network" \
88 --name="${_pkgname}" \
89 --exec="${pkgname} %U"
90 _set_build_env
91 _ensure_local_nvm
92 cd "${srcdir}/${pkgname}-${pkgver}/app/build"
93 sh "${pkgname}-brand.sh"
94 cd "${srcdir}/${pkgname}-${pkgver}/app"
95 NODE_ENV=development yarn install --cache-folder "${srcdir}/.yarn_cache"
96 cd "${srcdir}/${pkgname}-${pkgver}/lib"
97 NODE_ENV=development yarn install --cache-folder "${srcdir}/.yarn_cache"
98 cd "${srcdir}/${pkgname}-${pkgver}/desktop"
99 sed -i "s/\"electron\": \"[^\"]*\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/g" package.json
100 NODE_ENV=development yarn install --cache-folder "${srcdir}/.yarn_cache"
101 cd "${srcdir}/${pkgname}-${pkgver}/desktop/backend"
102 NODE_ENV=development yarn install --cache-folder "${srcdir}/.yarn_cache"
103 NODE_ENV=development yarn add -D semver
104}
105build() {
106 cd "${srcdir}/${pkgname}-${pkgver}/desktop"
107 _set_build_env
108 _ensure_local_nvm
109 NODE_OPTIONS="--max-old-space-size=4096" NODE_ENV=production yarn run build
110 NODE_ENV=production yarn electron-builder --linux dir -c.electronDist="${electronDist}" --config electron-builder.yml
111 local _app_dir=$(_get_app_dir)
112 find "${_app_dir}/resources/app.asar.unpacked" -type d \( -name "darwin-*" -o -name "win32-*" \) -exec rm -rf {} +
113}
114package() {
115 install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
116 install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
117 local _app_dir=$(_get_app_dir)
118 cp -a "${_app_dir}/resources/"* "${pkgdir}/usr/lib/${pkgname}/"
119 install -Dm644 "${srcdir}/${pkgname}-${pkgver}/desktop/build/icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
120 install -Dm644 "${srcdir}/${pkgname}-${pkgver}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
121 install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
122}
123

Changes since previous scan

--- PKGBUILD @ 2026-07-20 00:19
+++ PKGBUILD @ 2026-08-03 00:08
@@ -1,7 +1,7 @@
# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
pkgname=mustang
_pkgname=Mustang
-pkgver=0.9.33
+pkgver=0.9.34
_electronversion=41
_nodever=24
pkgrel=1

Scan history

Scanned at (UTC)SeverityRules
2026-08-03 00:08:14 LOW 2
2026-08-02 00:16:08 LOW 2
2026-08-01 00:11:18 LOW 2
2026-07-31 00:14:10 LOW 2
2026-07-30 00:17:23 LOW 2
2026-07-29 00:25:53 LOW 2
2026-07-28 00:07:28 LOW 2
2026-07-27 00:24:32 LOW 2
2026-07-26 00:07:32 LOW 2
2026-07-25 00:13:44 LOW 2
2026-07-24 00:02:28 LOW 2
2026-07-23 00:14:47 LOW 2
2026-07-22 00:29:32 LOW 2
2026-07-21 00:24:15 LOW 2
2026-07-20 11:14:00 MEDIUM 1
2026-07-20 00:19:49 LOW 2
2026-07-19 00:17:08 LOW 2
2026-07-18 00:14:48 LOW 2
2026-07-17 01:53:03 MEDIUM 1
2026-07-17 00:06:16 LOW 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion