qfirehose
Source is a zip from Quectel's own official forum (forums.quectel.com), which is plausibly the vendor's own distribution channel; it is built from source rather than installed as a prebuilt binary, and has a checksum. The non-standard host is the vendor's forum, not an unrelated file-sharing service, so risk is low.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (anthropic/claude-4.6-sonnet-20260217) reviewed the full PKGBUILD and judged it LOW (confidence 70%): Source is a zip from Quectel's own official forum (forums.quectel.com), which is plausibly the vendor's own distribution channel; it is built from source rather than installed as a prebuilt binary, and has a checksum. The non-standard host is the vendor's forum, not an unrelated file-sharing service, so risk is low.
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:15
"${_pkgname}.zip::https://forums.quectel.com/uploads/default/original/3X/9/f/9fc8d3a449c9780e4a3fed262e80129e89d27ef0.zip"
PKGBUILD
1 offending line(s) highlightedpkgname=qfirehose
pkgrel=1
pkgver=1.4.21
_pkgname="QFirehose_Linux_and_Android_V${pkgver}"
arch=(x86_64)
options=('!strip' '!debug')
license=('proprietary')
url='https://github.com/nippynetworks/qfirehose'
description='Driver for Quectel PCI Express modems'
makedepends=(
gcc
git
)
source=(
"${_pkgname}.zip::https://forums.quectel.com/uploads/default/original/3X/9/f/9fc8d3a449c9780e4a3fed262e80129e89d27ef0.zip"
)
sha256sums=('9e32fa5deba4001ee0857a0ed6a39d774700d000dd73000f03dcbee5d2f03398')
_to_filter=(
-fstack-clash-protection
-fstack-protector-strong
-fstack-protector
)
_filter_flags() {
local -n var="$1"
local -n remove="$2"
local filtered=()
local flag skip
# Split CFLAGS into words
read -ra flags <<< "${var}"
for flag in "${flags[@]}"; do
skip=0
for r in "${remove[@]}"; do
if [[ "${flag}" == "${r}" ]]; then
skip=1
break
fi
done
((skip)) || filtered+=("${flag}")
done
var="${filtered[*]}"
}
prepare() {
cd "${_pkgname}"
rm -rf out
sed -i -e 's/-Werror//g' Makefile
}
build() {
cd "${_pkgname}"
_filter_flags CFLAGS _to_filter
_filter_flags CXXFLAGS _to_filter
make
}
package() {
cd "${_pkgname}"
install -Dm0755 out/QFirehose "${pkgdir}/usr/bin/QFirehose"
for i in README.md NOTICE
do
install -Dm0644 "${i}" "${pkgdir}/usr/share/doc/${pkgname}/${i}"
done
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Low | 2 |
| 2026-10-31 00:07:41 | Low | 2 |
| 2026-10-30 00:29:30 | Low | 2 |
| 2026-10-29 00:13:55 | Low | 2 |
| 2026-10-28 00:06:54 | Low | 2 |
| 2026-10-27 00:23:28 | Low | 2 |
| 2026-10-26 00:12:40 | Low | 2 |
| 2026-10-25 00:20:48 | Low | 2 |
| 2026-10-24 00:14:55 | Low | 2 |
| 2026-10-23 00:02:19 | Low | 2 |
| 2026-10-22 00:13:10 | Low | 2 |
| 2026-10-21 00:12:50 | Low | 2 |
| 2026-10-20 00:10:31 | Low | 2 |
| 2026-10-19 00:03:55 | Low | 2 |
| 2026-10-18 00:06:55 | Low | 2 |
| 2026-10-17 00:21:55 | Low | 2 |
| 2026-10-16 00:12:47 | Low | 2 |
| 2026-10-15 00:28:05 | Low | 2 |
| 2026-10-14 00:06:47 | Low | 2 |
| 2026-10-13 00:23:45 | Low | 2 |