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-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |
| 2026-08-29 00:29:17 | Low | 2 |