gourmand-git
The package uses pip to install a Python wheel built from the local source, but the command `venv/bin/pip install --isolated "$wheel[$extras]" "setuptools"` involves a variable expansion `$extras` derived from an external script `get-extras.py` that could influence what is installed, creating a potential supply-chain risk if the script is tampered with or returns unexpected input.
Triggered rules
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:37
venv/bin/pip install --isolated "$wheel[$extras]" "setuptools"
llm_review
An AI model (qwen/qwen3-235b-a22b-07-25) reviewed this and agrees it is MEDIUM (confidence 90%): The package uses pip to install a Python wheel built from the local source, but the command `venv/bin/pip install --isolated "$wheel[$extras]" "setuptools"` involves a variable expansion `$extras` derived from an external script `get-extras.py` that could influence what is installed, creating a potential supply-chain risk if the script is tampered with or returns unexpected input.
-
PKGBUILD:37
venv/bin/pip install --isolated "$wheel[$extras]" "setuptools"
PKGBUILD
1 offending line(s) highlighted# Maintainer: fridge <echo dW5sb3ZhYmxlX2ZyaWRnZTM1NkBhbGVlYXMuY29tCg== | base64 -d>
pkgname="gourmand-git"
pkgver="1.2.0.r20.be6261df"
pkgrel="2"
pkgdesc="A manager, editor, and organizer for recipes."
url="https://github.com/GourmandRecipeManager/${pkgname%-git}"
license=("GPL-2.0-only")
source=("$pkgname::git+$url.git" "get-extras.py")
b2sums=("SKIP" "d31820469d0cc07c6c53f7ef2bcf59dd153c82b5fc44347bf78d32797f43dbae2ac0a158ed2aba4dc4a2a74cb54539fb5fe1e6148c81e544503da054d992fcbc")
arch=("x86_64")
makedepends=("gendesk" "coreutils" "python-virtualenv" "python-pip" "python-setuptools" "git" "intltool")
depends=("bash")
conflicts=("${pkgname%-git}")
provides=("${pkgname%-git}=$pkgver")
pkgver()
{
cd "$pkgname" || exit
local currentCommit; currentCommit="$(git rev-parse HEAD)"
local latestReleaseWithoutPreReleases; latestReleaseWithoutPreReleases="$(git describe --tags --abbrev=0 --exclude "*rc*")"
git describe --long --tags --match "$latestReleaseWithoutPreReleases" "$currentCommit" | sed -r "s/-([0-9]+)-/.r\1./; s/\.g/./"
}
build()
{
gendesk -f -n --categories="Utility" --startupnotify="true"
echo "creating start script"
echo -e '#!/bin/bash\ncd "/opt/'"${pkgname%-git}"'/bin"\n"./'"${pkgname%-git}"'" -q "$@"' > "${pkgname%-git}"
cd "$pkgname" || exit
echo "creating virtual environment"
python -m venv --clear --copies venv
echo "building Gourmand wheel"
python setup.py bdist_wheel
echo "installing into virtual environment"
local wheel; wheel="$(ls dist/*.whl)"
local extras; extras="$($srcdir/get-extras.py)"
venv/bin/pip install --isolated "$wheel[$extras]" "setuptools"
echo "removing unnecessary packages from virtual environment"
venv/bin/pip uninstall --isolated -y pip
echo "making virtual environment portable"
sed -i '1s|.*|#!/usr/bin/env -S /bin/sh -c '"'"'"\$(dirname "\$0")/python" "\$0" "\$@"'"'"'|' "venv/bin/${pkgname%-git}"
}
package()
{
install -dv "$pkgdir/opt/${pkgname%-git}"
cp -afLv "$pkgname/venv/"* "$pkgdir/opt/${pkgname%-git}"
install -Dvm755 "${pkgname%-git}" "$pkgdir/usr/bin/${pkgname%-git}"
install -Dvm644 "${pkgname%-git}.desktop" "$pkgdir/usr/share/applications/${pkgname%-git}.desktop"
install -Dvm644 "$pkgname/src/${pkgname%-git}/data/images/${pkgname%-git}.svg" "$pkgdir/usr/share/icons/${pkgname%-git}.svg"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Medium | 2 |
| 2026-09-16 00:03:17 | Medium | 2 |
| 2026-09-15 00:25:31 | Medium | 2 |
| 2026-09-14 00:27:57 | Medium | 2 |
| 2026-09-13 00:19:54 | Medium | 2 |
| 2026-09-12 00:25:17 | Medium | 2 |
| 2026-09-11 00:19:22 | Medium | 2 |
| 2026-09-10 00:22:44 | Medium | 2 |
| 2026-09-09 00:04:09 | Medium | 2 |
| 2026-09-08 00:18:08 | Medium | 2 |
| 2026-09-07 00:30:15 | Medium | 2 |
| 2026-09-06 00:17:06 | Medium | 2 |
| 2026-09-05 00:16:27 | Medium | 2 |
| 2026-09-04 00:03:13 | Medium | 2 |
| 2026-09-03 00:15:47 | Medium | 2 |
| 2026-09-02 00:02:31 | Medium | 2 |
| 2026-09-01 00:11:19 | Medium | 2 |
| 2026-08-31 00:19:57 | Medium | 2 |
| 2026-08-30 00:04:14 | Medium | 2 |
| 2026-08-29 00:29:17 | Medium | 2 |