longbridge-bin
The package downloads a prebuilt .deb from a non-standard host (assets.lbctrl.com) which is not a common code hosting platform, and the binary is directly installed without rebuilding from source, creating a supply-chain risk if the host is compromised.
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:23
source=("https://assets.lbctrl.com/github/release/longbridge-desktop/stable/longbridge-v${pkgver}-linux-x86_64.deb")
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 95%): The package downloads a prebuilt .deb from a non-standard host (assets.lbctrl.com) which is not a common code hosting platform, and the binary is directly installed without rebuilding from source, creating a supply-chain risk if the host is compromised.
PKGBUILD
1 offending line(s) highlighted# Maintainer: rzhli
pkgname=longbridge-bin
pkgver=1.0.0
pkgrel=1
pkgdesc="Longbridge Desktop trading platform"
arch=("x86_64")
url="https://longbridge.com/desktop/"
license=("custom")
depends=(
"glibc"
"gtk3"
"nss"
"alsa-lib"
"libxss"
"libxtst"
"xdg-utils"
"libxcrypt-compat"
"webkit2gtk-4.1"
)
provides=("longbridge")
conflicts=("longbridge")
options=('!strip')
source=("https://assets.lbctrl.com/github/release/longbridge-desktop/stable/longbridge-v${pkgver}-linux-x86_64.deb")
sha256sums=('d7bc2794eef49b5f1f17fa6fec9055bf9f114e847f1923814856a819cab6f811')
prepare() {
cd "$srcdir"
# 清理并创建解压目录
rm -rf ext
mkdir -p ext
# 提取 deb 中的 data.tar.*
bsdtar -xf data.tar.* -C ext
# 调试:查看实际文件结构
echo "=== 检查 DEB 包结构 ==="
find ext -type f | head -20
}
package() {
cd "$srcdir/ext"
# ========================================
# 1. 复制所有文件到标准位置
# ========================================
# 主要文件在 usr/ 下,直接复制整个目录
if [[ -d "usr" ]]; then
cp -a usr "$pkgdir/"
fi
# 如果还有 usr/local,也迁移到 usr
if [[ -d "usr/local" ]]; then
mkdir -p "$pkgdir/usr"
cp -a usr/local/* "$pkgdir/usr/"
fi
# ========================================
# 2. 修复桌面文件
# ========================================
local _desktop="$pkgdir/usr/share/applications/longbridge-desktop.desktop"
if [[ -f "$_desktop" ]]; then
# 修复 TryExec 为绝对路径
sed -i "s|^TryExec=.*|TryExec=/usr/bin/longbridge|g" "$_desktop"
# 修复 Exec - 不添加任何参数,让程序自己处理
sed -i "s|^Exec=.*|Exec=/usr/bin/longbridge %U|g" "$_desktop"
# 确保图标正确 (与 hicolor 中的 longbridge-desktop.png 对应)
sed -i "s|^Icon=.*|Icon=longbridge-desktop|g" "$_desktop"
# 修复类别 - 改为网络/互联网类别
if grep -q "^Categories=" "$_desktop"; then
sed -i "s|^Categories=.*|Categories=Network;Finance;|g" "$_desktop"
else
echo "Categories=Network;Finance;" >> "$_desktop"
fi
# 确保其他必需字段存在
if ! grep -q "^Terminal=" "$_desktop"; then
echo "Terminal=false" >> "$_desktop"
fi
if ! grep -q "^Type=" "$_desktop"; then
echo "Type=Application" >> "$_desktop"
fi
if ! grep -q "^StartupNotify=" "$_desktop"; then
sed -i "s|^StartupNotify=.*|StartupNotify=true|g" "$_desktop"
fi
else
error "桌面文件不存在: $_desktop"
return 1
fi
# ========================================
# 3. 主程序在 /usr/lib/longbridge-desktop/ 下,
# 创建 /usr/bin/longbridge 符号链接
# ========================================
local _bin="$pkgdir/usr/lib/longbridge-desktop/longbridge"
if [[ -f "$_bin" ]]; then
chmod +x "$_bin"
mkdir -p "$pkgdir/usr/bin"
ln -s /usr/lib/longbridge-desktop/longbridge "$pkgdir/usr/bin/longbridge"
else
error "未找到主程序 /usr/lib/longbridge-desktop/longbridge"
return 1
fi
# ========================================
# 4. 许可证文件
# ========================================
find . -name "copyright" -exec install -Dm644 {} "$pkgdir/usr/share/licenses/$pkgname/LICENSE" \; || true
}
post_install() {
echo "正在更新桌面数据库..."
update-desktop-database -q
echo "正在更新图标缓存..."
gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor || true
echo ""
echo "Longbridge 安装完成!"
echo "如果图标未显示,请尝试:"
echo " 1. 注销并重新登录"
echo " 2. 运行: gtk-update-icon-cache -f /usr/share/icons/hicolor"
echo ""
}
post_upgrade() {
post_install
}
post_remove() {
update-desktop-database -q
gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor || true
}
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 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 |
| 2026-10-13 07:16:10 | Medium | 2 |