eusoft-frhelper-bin
The package downloads a prebuilt AppImage executable from a non-whitelisted host (static.eudic.net), which is not a standard code or package host, creating a supply-chain risk if the host were compromised or maliciously redirected.
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:31
"${pkgname%-bin}-${pkgver}-x86_64.AppImage::https://static.eudic.net/pkg/${_pkgname}.AppImage"
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 90%): The package downloads a prebuilt AppImage executable from a non-whitelisted host (static.eudic.net), which is not a standard code or package host, creating a supply-chain risk if the host were compromised or maliciously redirected.
PKGBUILD
1 offending line(s) highlighted# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
_pkgname=frhelper
pkgname="eusoft-${_pkgname}-bin"
pkgver=13.5.2
pkgrel=1
pkgdesc="Authoritative French dictionary software, an essential tool for French learners.法语助手,权威的法语词典软件,法语学习者必备的工具."
arch=('x86_64')
url="https://www.eudic.net/v4/fr/app/frhelper"
license=('LicenseRef-custom')
conflicts=(
"${pkgname%-bin}"
"${_pkgname}"
)
depends=(
'nss'
'alsa-lib'
'libdrm'
'mesa'
'harfbuzz'
'fontconfig'
'libx11'
'libxcb'
'zlib'
'pipewire-jack'
)
options=(
'!strip'
'!emptydirs'
)
source=(
"${pkgname%-bin}-${pkgver}-x86_64.AppImage::https://static.eudic.net/pkg/${_pkgname}.AppImage"
"LICENSE.html"
"${pkgname%-bin}.sh"
)
sha256sums=('54b3547355e4f80aa3e5eddd41437415137d2c2a09feda0944c39c47921af09c'
'c12c477048571d64eb8651ec470bfc1b3b738b591cfce0322eeadbe921a86917'
'201a36e0ee0aa94382edf92857d19862c819bb0878f367cdbbf23f2785223031')
pkgver() {
cat "${srcdir}/.pkgver" 2>/dev/null || echo "${pkgver}"
}
prepare() {
sed -i -e "
s/@appname@/${pkgname%-bin}/g
s/@runname@/${_pkgname}/g
" "${srcdir}/${pkgname%-bin}.sh"
chmod +x "${srcdir}/${pkgname%-bin}-${pkgver}-${CARCH}.AppImage"
rm -rf "${srcdir}/squashfs-root"
"${srcdir}/${pkgname%-bin}-${pkgver}-${CARCH}.AppImage" --appimage-extract > /dev/null
grep "X-AppImage-Version" "${srcdir}/squashfs-root/default.desktop" | sed "s/X-AppImage-Version=//g" > "${srcdir}/.pkgver"
sed -i -e "
s/\/usr\/share\/${_pkgname}\/AppRun/env QT_AUTO_SCREEN_SCALE_FACTOR=1 QT_IM_MODULE=fcitx QT_QPA_PLATFORM=\"xcb\" ${pkgname%-bin}/g
s/Icon=com.eusoft.${_pkgname}/Icon=${pkgname%-bin}/g
" "${srcdir}/squashfs-root/default.desktop"
ln -sf "/usr/lib/qt/plugins/platforminputcontexts/libfcitx"*.so "${srcdir}/squashfs-root/plugins/platforminputcontexts/"
}
package() {
install -Dm755 "${srcdir}/${pkgname%-bin}.sh" "${pkgdir}/usr/bin/${pkgname%-bin}"
install -Dm755 -d "${pkgdir}/usr/lib/${pkgname%-bin}"
cp -a "${srcdir}/squashfs-root/." "${pkgdir}/usr/lib/${pkgname%-bin}"
install -Dm644 "${srcdir}/squashfs-root/default.desktop" "${pkgdir}/usr/share/applications/${pkgname%-bin}.desktop"
install -Dm644 "${srcdir}/squashfs-root/com.eusoft.${_pkgname}.png" "${pkgdir}/usr/share/pixmaps/${pkgname%-bin}.png"
install -Dm644 "${srcdir}/LICENSE.html" -t "${pkgdir}/usr/share/licenses/${pkgname}"
}
Changes since previous scan
--- PKGBUILD @ 2026-10-30 00:29+++ PKGBUILD @ 2026-11-01 00:21@@ -1,7 +1,7 @@ # Maintainer: zxp19821005 <zxp19821005 at 163 dot com> _pkgname=frhelper pkgname="eusoft-${_pkgname}-bin"-pkgver=26.9.0+pkgver=13.5.2 pkgrel=1 pkgdesc="Authoritative French dictionary software, an essential tool for French learners.法语助手,权威的法语词典软件,法语学习者必备的工具." arch=('x86_64')@@ -12,125 +12,53 @@ "${_pkgname}" ) depends=(- 'qt5-base'- 'qt5-multimedia'- 'qt5-webengine'- 'qt5-svg'- 'qt5-serialport'- 'qt5-speech'- 'qt5-webchannel'- 'qt5-location'- 'gtk3' 'nss' 'alsa-lib' 'libdrm' 'mesa' 'harfbuzz'- 'libthai' 'fontconfig' 'libx11' 'libxcb'- 'libxext'- 'libxrender'- 'libxfixes'- 'libxcursor'- 'libxi'- 'libxrandr'- 'libxss'- 'libxtst'- 'libxau'- 'libxdmcp'- 'glib2' 'zlib'- 'bzip2'- 'libpng'- 'libjpeg-turbo'- 'freetype2'- 'libglvnd'- 'wayland'- 'libpulse'- 'libdbus'- 'libxkbcommon'- 'curl'- 'icu'- 'libxml2'- 'gstreamer'- 'gst-plugins-base-libs'- 'gst-plugins-bad-libs'- 'gst-plugins-good'- 'gst-libav'- 'libgudev'- 'libogg'- 'libvorbis'- 'speex'- 'lame'- 'libtheora'- 'opus'- 'wavpack'- 'twolame'- 'mpg123'- 'libshout'- 'libcaca'- 'aalib'- 'libdv'- 'v4l-utils'- 'libiec61883'- 'libavc1394'- 'libraw1394'- 'graphene'- 'libsoup'- 'taglib'- 'sqlite'- 'libxv' 'pipewire-jack'- 'libgpg-error'- 'cdparanoia'- 'orc'- 'libp11-kit'- 'gmp' ) options=( '!strip' '!emptydirs' ) source=(- "${pkgname%-bin}-${pkgver}.deb::https://static.frdic.com/pkg/${_pkgname}.deb?v=${pkgver}"+ "${pkgname%-bin}-${pkgver}-x86_64.AppImage::https://static.eudic.net/pkg/${_pkgname}.AppImage" "LICENSE.html" "${pkgname%-bin}.sh" )-sha256sums=('ce5fcba8f0a2ffd0bff6b62e63f658883e795577caca130698de799a8647530c'+sha256sums=('54b3547355e4f80aa3e5eddd41437415137d2c2a09feda0944c39c47921af09c' 'c12c477048571d64eb8651ec470bfc1b3b738b591cfce0322eeadbe921a86917'- '07aefce5b6c9dce4fec424cfb3d1c2456680d6936e62651484253a031c921db9')+ '201a36e0ee0aa94382edf92857d19862c819bb0878f367cdbbf23f2785223031')+pkgver() {+ cat "${srcdir}/.pkgver" 2>/dev/null || echo "${pkgver}"+} prepare() { sed -i -e " s/@appname@/${pkgname%-bin}/g s/@runname@/${_pkgname}/g " "${srcdir}/${pkgname%-bin}.sh"- bsdtar -xf "${srcdir}/data."*- # Remove bundled libraries - use system components instead- _libdir="${srcdir}/usr/share/${pkgname%-bin}/lib"- find "${_libdir}" -maxdepth 1 -name "libQt5*.so*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(X11\|Xau\|Xdmcp\|Xext\|Xrender\|Xfixes\|Xcursor\|Xi\|Xrandr\|Xss\|Xtst\|xcb\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(GL\|EGL\|drm\|gbm\|wayland\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(asound\|pulse\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(ssl\|crypto\|nss3\|nssutil3\|smime3\|nspr4\|plds4\|plc4\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(z\|bz2\|lz4\|lzma\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(fontconfig\|freetype\|harfbuzz\|thai\|datrie\|xkbcommon\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(glib-2.0\|dbus-1\|icu\|xml2\|curl\|stdc\+\+\|gcc_s\|gmodule\|gobject\|gio\|gthread\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(gtk-3\|gdk-3\|cairo\|pango\|pangocairo\|pangoft2\|atk\|atspi\|gdk-pixbuf\|epoxy\|pixman\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(gstreamer\|gst.*\).*\.so.*" -delete- find "${_libdir}" -maxdepth 1 -regex ".*/lib\(png\|jpeg\|tiff\|webp\|flac\|ogg\|vorbis\|opus\|speex\|theora\|mpg123\|lame\|twolame\|wavpack\|tag\|sqlite\|systemd\|udev\|gudev\|blkid\|mount\|selinux\|pcre\|ffi\|keyutils\|krb5\).*\.so.*" -delete+ chmod +x "${srcdir}/${pkgname%-bin}-${pkgver}-${CARCH}.AppImage"+ rm -rf "${srcdir}/squashfs-root"+ "${srcdir}/${pkgname%-bin}-${pkgver}-${CARCH}.AppImage" --appimage-extract > /dev/null+ grep "X-AppImage-Version" "${srcdir}/squashfs-root/default.desktop" | sed "s/X-AppImage-Version=//g" > "${srcdir}/.pkgver" sed -i -e "- s/\/usr\/share\/${pkgname%-bin}\/AppRun/${pkgname%-bin}/g- s/com.eusoft.${_pkgname}/${pkgname%-bin}/g- " "${srcdir}/usr/share/applications/${pkgname%-bin}.desktop"+ s/\/usr\/share\/${_pkgname}\/AppRun/env QT_AUTO_SCREEN_SCALE_FACTOR=1 QT_IM_MODULE=fcitx QT_QPA_PLATFORM=\"xcb\" ${pkgname%-bin}/g+ s/Icon=com.eusoft.${_pkgname}/Icon=${pkgname%-bin}/g+ " "${srcdir}/squashfs-root/default.desktop"+ ln -sf "/usr/lib/qt/plugins/platforminputcontexts/libfcitx"*.so "${srcdir}/squashfs-root/plugins/platforminputcontexts/" } package() { install -Dm755 "${srcdir}/${pkgname%-bin}.sh" "${pkgdir}/usr/bin/${pkgname%-bin}"- install -Dm755 -d "${pkgdir}/usr/lib"- cp -a "${srcdir}/usr/share/${pkgname%-bin}" "${pkgdir}/usr/lib"- install -Dm644 "${srcdir}/usr/share/applications/${pkgname%-bin}.desktop" -t "${pkgdir}/usr/share/applications"- install -Dm644 "${srcdir}/usr/share/pixmaps/com.eusoft.${_pkgname}.png" "${pkgdir}/usr/share/pixmaps/${pkgname%-bin}.png"+ install -Dm755 -d "${pkgdir}/usr/lib/${pkgname%-bin}"+ cp -a "${srcdir}/squashfs-root/." "${pkgdir}/usr/lib/${pkgname%-bin}"+ install -Dm644 "${srcdir}/squashfs-root/default.desktop" "${pkgdir}/usr/share/applications/${pkgname%-bin}.desktop"+ install -Dm644 "${srcdir}/squashfs-root/com.eusoft.${_pkgname}.png" "${pkgdir}/usr/share/pixmaps/${pkgname%-bin}.png" install -Dm644 "${srcdir}/LICENSE.html" -t "${pkgdir}/usr/share/licenses/${pkgname}" } Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Medium | 2 |
| 2026-10-31 00:07:41 | Medium | 2 |
| 2026-10-30 11:55:28 | Medium | 2 |
| 2026-10-30 00:29:30 | Medium | 2 |
| 2026-10-29 00:13:55 | Medium | 2 |
| 2026-10-28 00:06:54 | Medium | 2 |
| 2026-10-27 00:23:28 | Medium | 2 |
| 2026-10-26 00:12:40 | Medium | 2 |
| 2026-10-25 00:20:48 | Medium | 2 |
| 2026-10-24 00:14:55 | Medium | 2 |
| 2026-10-23 00:02:19 | Medium | 2 |
| 2026-10-22 00:13:10 | Medium | 2 |
| 2026-10-21 00:12:50 | Medium | 2 |
| 2026-10-20 00:10:31 | Medium | 2 |
| 2026-10-19 00:03:55 | Medium | 2 |
| 2026-10-18 00:06:55 | Medium | 2 |
| 2026-10-17 00:21:55 | Medium | 2 |
| 2026-10-16 00:12:47 | Medium | 2 |
| 2026-10-15 00:28:05 | Medium | 2 |
| 2026-10-14 00:06:47 | Medium | 2 |