sign-and-seal
The pip install is used to fetch build dependencies (like PyInstaller and libraries) in an isolated virtual environment to compile the application from the project's own source; this is a normal part of building a Python application and does not involve executing untrusted remote code or installing packages system-wide.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The pip install is used to fetch build dependencies (like PyInstaller and libraries) in an isolated virtual environment to compile the application from the project's own source; this is a normal part of building a Python application and does not involve executing untrusted remote code or installing packages system-wide.
1 higher static finding superseded - not the current verdict (shown for transparency)
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:52
./build_env/bin/pip install --upgrade pip -
PKGBUILD:53
./build_env/bin/pip install pyinstaller pymupdf PyQt6 Pillow opencv-python-headless numpy qrcode "pyhanko[crypto]"
PKGBUILD
2 offending line(s) highlighted# Maintainer: Daniel Serrano Armenta (AnabasaSoft) <anabasasoft@gmail.com>
pkgname=sign-and-seal
pkgver=1.14
pkgrel=2
pkgdesc="Simple PDF Signer for Linux (Sign & Seal) - Compiled from source"
arch=('x86_64')
url="https://github.com/AnabasaSoft/SignAndSeal"
license=('LGPL3')
provides=('sign-and-seal')
conflicts=('sign-and-seal-bin')
# Dependencias mínimas del sistema para ejecutar el binario resultante
depends=('glibc' 'zlib' 'fuse2')
# Dependencias para compilar: Solo pedimos Python y Git.
# El resto lo bajaremos vía pip para evitar errores de pacman.
makedepends=('python' 'git')
source=("https://github.com/AnabasaSoft/SignAndSeal/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('54632b21b6c2f054237e5c3205d30fd6450b64e072821cc00ca7c3c042f74dcf')
prepare() {
cd "SignAndSeal-${pkgver}"
# 1. Renombrar script si es necesario
if [ -f "sign_and_seal_v2.py" ]; then
mv sign_and_seal_v2.py sign_and_seal.py
fi
# 2. Generar .desktop al vuelo
cat > sign-and-seal.desktop <<EOF
[Desktop Entry]
Name=Sign & Seal
Comment=Firmador de PDFs simple
Exec=/usr/bin/sign-and-seal
Icon=sign-and-seal
Type=Application
Categories=Office;Utility;
Terminal=false
EOF
}
build() {
cd "SignAndSeal-${pkgver}"
echo "--- Creando entorno virtual de compilación (aislado) ---"
python -m venv build_env
echo "--- Instalando dependencias de compilación con pip ---"
# Usamos las rutas directas para no depender de 'source activate'
./build_env/bin/pip install --upgrade pip
./build_env/bin/pip install pyinstaller pymupdf PyQt6 Pillow opencv-python-headless numpy qrcode "pyhanko[crypto]"
echo "--- Compilando binario ---"
# Llamamos al pyinstaller del entorno virtual
./build_env/bin/pyinstaller --clean --onefile --noconsole --hidden-import=cv2 \
--name "SignAndSeal" \
--add-data "sign_and_seal_icon.png:." \
sign_and_seal.py
}
package() {
cd "SignAndSeal-${pkgver}"
# 1. Instalar el binario generado
install -Dm755 "dist/SignAndSeal" "${pkgdir}/usr/bin/sign-and-seal"
# 2. Instalar el icono
install -Dm644 "sign_and_seal_icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/sign-and-seal.png"
# 3. Instalar el .desktop
install -Dm644 "sign-and-seal.desktop" "${pkgdir}/usr/share/applications/sign-and-seal.desktop"
}
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 |