circle
This PKGBUILD downloads a prebuilt closed-source binary compiler from circle-lang.org (the official upstream vendor site for the Circle C++ compiler), but does so via a dynamically constructed URL that scrapes the directory listing at build time to find the latest build number. Two real concerns exist: (1) The checksum is SKIP, so there is no integrity verification of the downloaded binary. (2) The URL is constructed by executing curl and parsing HTML at makepkg time, meaning a compromised or MITM'd circle-lang.org could serve a different binary without detection. The host itself (circle-lang.org) is the legitimate upstream for this compiler, so this is not an unofficial/personal host, but the dynamic URL construction combined with SKIP checksum and execution of a prebuilt binary creates a genuine supply-chain risk. The pkgver() function also executes the downloaded binary (./circle -version) before the package() step, meaning arbitrary code from the downloaded tarball runs during the build. This is a real medium-severity concern: not clearly malicious, but a prebuilt binary executed with no integrity check from a host that, while official, could be compromised or subject to MITM.
Triggered rules
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:10
source=(https://www.circle-lang.org/linux/build_`curl 'https://www.circle-lang.org/linux/?C=M;O=D' -s | grep -Po '(?<=build_(?!latest)).+?(?=\.tgz)' | head -1`.tgz)
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 82%): This PKGBUILD downloads a prebuilt closed-source binary compiler from circle-lang.org (the official upstream vendor site for the Circle C++ compiler), but does so via a dynamically constructed URL that scrapes the directory listing at build time to find the latest build number. Two real concerns exist: (1) The checksum is SKIP, so there is no integrity verification of the downloaded binary. (2) The URL is constructed by executing curl and parsing HTML at makepkg time, meaning a compromised or MITM'd circle-lang.org could serve a different binary without detection. The host itself (circle-lang.org) is the legitimate upstream for this compiler, so this is not an unofficial/personal host, but the dynamic URL construction combined with SKIP checksum and execution of a prebuilt binary creates a genuine supply-chain risk. The pkgver() function also executes the downloaded binary (./circle -version) before the package() step, meaning arbitrary code from the downloaded tarball runs during the build. This is a real medium-severity concern: not clearly malicious, but a prebuilt binary executed with no integrity check from a host that, while official, could be compromised or subject to MITM.
PKGBUILD
1 offending line(s) highlighted# Maintainer: <tjmnkrajyej at gmail dot com>
pkgname=circle
pkgver=1.0.0_200
pkgrel=1
pkgdesc='a C++ compiler with many novel language features'
arch=(x86_64)
url=https://circle-lang.org
license=(custom)
depends=('gcc>=10.2')
source=(https://www.circle-lang.org/linux/build_`curl 'https://www.circle-lang.org/linux/?C=M;O=D' -s | grep -Po '(?<=build_(?!latest)).+?(?=\.tgz)' | head -1`.tgz)
sha256sums=(SKIP)
prepare() {
mkdir -p libedit
ln -sf /usr/lib/libedit.so libedit/libedit.so.2
}
pkgver() {
LD_LIBRARY_PATH=libedit ./circle -version | head -1 | grep -Po '(?<=version ).+' | sed 's/-/_/g'
}
package() {
ln -sf /usr/lib/libedit.so
install -D libedit.so "$pkgdir/usr/lib/libedit.so.2"
install -Dm 755 circle "$pkgdir/usr/bin/circle"
install -Dm 664 license.txt "$pkgdir/usr/share/licenses/$pkgname/license.txt"
}
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 |