easyabc
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 72%): The PKGBUILD installs Python dependencies (wxpython, pyparsing, pygame) via pip from PyPI into a venv during the package() phase. While this is non-standard Arch packaging practice (dependencies should come from pacman), all three packages are well-known, legitimate PyPI packages with large user bases and active maintainers. wxpython is pinned to 4.1.1; pyparsing and pygame are unpinned but are extremely well-known packages unlikely to be typosquatted or substituted. The source itself comes from the official upstream GitHub repository. The main concern is sloppy packaging (pip in package(), no version pinning for two deps, venv installed into /opt) rather than a genuine supply-chain attack vector. This is a low-severity packaging quality issue, not a medium supply-chain risk.
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:48
pip install --upgrade pip -
PKGBUILD:49
pip install wxpython==4.1.1 --use-pep517 -
PKGBUILD:50
pip install pyparsing -
PKGBUILD:51
pip install pygame
PKGBUILD
4 offending line(s) highlighted# Maintainer: mattski <redmattski at gmail dot com>
# Contributor: Lex Black <autumn-wind@web.de>
# Contributor: Simon Thorpe <simon@hivetechnology.com.au>
pkgname=easyabc
pkgver=305
pkgrel=1
pkgdesc="A graphical music notation editor for the ABC music notation language"
arch=('any')
url="https://github.com/jwdj/EasyABC"
license=('GPL')
#depends=('python-wxpython' 'python-pyparsing' 'python-pygame' 'abcmidi' 'abcm2ps' 'ghostscript')
depends=('python39' 'abcmidi' 'abcm2ps' 'ghostscript')
makedepends=('gendesk' 'git')
provides=($pkgname)
conflicts=($pkgname)
source=("$pkgname::git+https://github.com/jwdj/EasyABC.git")
md5sums=('SKIP')
prepare(){
gendesk -f -n --pkgname "$pkgname" --pkgdesc "$pkgdesc" \
--name='EasyABC' \
--mimetype='text/vnd.abc' \
--categories 'Audio;Sequencer;Midi;AudioVideoEditing;Music;AudioVideo;'
}
pkgver(){
cd $pkgname
git log --pretty=format: | wc -l
}
package(){
mkdir -p "$pkgdir"/usr/share
mkdir -p "$pkgdir"/usr/bin
mkdir -p "$pkgdir"/opt/easyabc/bin
install -dm755 "$pkgdir"/opt/easyabc
cp -dpr --no-preserve=ownership "${pkgname}" $pkgdir/opt/
echo -e '#!/bin/bash\n/opt/easyabc/bin/python /opt/easyabc/easy_abc.py "$@"' > $pkgdir/usr/bin/easyabc
chmod +x $pkgdir/usr/bin/easyabc
install -Dm644 "${pkgname}/img/logo64.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
cd "$pkgdir"/opt
python3.9 -m venv easyabc
source easyabc/bin/activate
pip install --upgrade pip
pip install wxpython==4.1.1 --use-pep517
pip install pyparsing
pip install pygame
ln -s /usr/bin/abc2abc $pkgdir/opt/easyabc/bin/
ln -s /usr/bin/abc2midi $pkgdir/opt/easyabc/bin/
ln -s /usr/bin/abcm2ps $pkgdir/opt/easyabc/bin/
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 00:14:48 | LOW | 2 |
| 2026-07-17 00:06:16 | LOW | 2 |
| 2026-07-16 00:05:41 | LOW | 2 |
| 2026-07-15 00:09:25 | LOW | 2 |