firefox-extension-ruffle
ruffle
scanned 2026-11-01 00:21:48.120785
The PKGBUILD installs wasm-bindgen-cli via cargo install during prepare(), but this is a build dependency for the project's own source from a trusted upstream (GitHub), not an untrusted external payload.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The PKGBUILD installs wasm-bindgen-cli via cargo install during prepare(), but this is a build dependency for the project's own source from a trusted upstream (GitHub), not an untrusted external payload.
1 higher static finding superseded - not the current verdict (shown for transparency)
alt_pkg_manager_install
A non-pip/npm package manager (pipx, uv, poetry, cargo install, go install, gem, conda…) fetches and builds an external package at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:37
cargo install wasm-bindgen-cli --version "$require_wasm_bindgen_version"
PKGBUILD
1 offending line(s) highlighted_system_wasm_bindgen=false
pkgbase=ruffle
pkgname=(ruffle
ruffle-demo
ruffle-selfhosted
firefox-extension-ruffle
chromium-extension-ruffle)
pkgver=0.7.0
pkgrel=1
arch=("x86_64")
pkgdesc="A Flash Player emulator written in Rust."
url="https://ruffle.rs/"
license=("MIT OR Apache-2.0")
makedepends=("cargo" "cmake" "java-environment" "npm" "nodejs-lts-jod"
"binaryen" "gtk3" "alsa-lib" "libxcb" "systemd-libs"
"clang" "jq" "git" "openssl" "rust-wasm" "rust-src")
if "$_system_wasm_bindgen"
then
makedepends+=("wasm-bindgen")
else
makedepends+=("yq")
fi
source=("git+https://github.com/ruffle-rs/ruffle.git#tag=v$pkgver")
sha256sums=('7e80a5bf3ce7153828cb4debd5257b789adcbceb00be7f8669fcbbfe0e64caef')
options=("!lto")
_FIREFOX_EXTENSION_ID="ruffle@ruffle.rs"
prepare() {
cd "$srcdir/ruffle"
export RUSTUP_TOOLCHAIN=stable
if ! "$_system_wasm_bindgen"
then
local require_wasm_bindgen_version
require_wasm_bindgen_version="$(tomlq -r '.package[] | select(.name == "wasm-bindgen") | .version' Cargo.lock)"
cargo install wasm-bindgen-cli --version "$require_wasm_bindgen_version"
fi
cargo fetch --locked --target host-tuple
cargo fetch --locked --target wasm32-unknown-unknown
cd web
npm ci
jq --null-input \
--arg version_channel "stable" \
--arg version_number "$pkgver" \
--arg version_name "$pkgver" \
--arg build_date "$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y-%m-%d)" \
--arg build_id "$pkgrel" \
--arg commitHash "$(git rev-parse HEAD)" \
--arg firefox_extension_id "$_FIREFOX_EXTENSION_ID" \
'$ARGS.named' > version_seal.json
echo "Generated version_seal.json:"
cat version_seal.json
}
build() {
cd "$srcdir/ruffle"
if ! "$_system_wasm_bindgen"
then
export PATH="$PATH:$HOME/.cargo/bin"
fi
export RUSTUP_TOOLCHAIN=stable
export CARGO_TARGET_DIR=target
# libtracy_client-sys seems missing some symbols, skip enabling all features.
# jpegxr is not compatible to rust 1.94.0
cargo build --frozen --release \
--package=ruffle_desktop \
--package=ruffle_scanner \
--package=exporter
# Script will read binary at hardcoded path
# See web/packages/core/tools/build_wasm.ts for more info.
unset CARGO_TARGET_DIR
# Flags does not supported by WASM target:
# C/CXX: -mtune -march -fcf-protection
# RUST: -Ctarget-cpu
CFLAGS="$(echo "$CFLAGS" | sed -E 's/-m(tune|arch)=[0-9a-zA-Z-]+//g;s/-fcf-protection//g')"
CXXFLAGS="$(echo "$CXXFLAGS" | sed -E 's/-m(tune|arch)=[0-9a-zA-Z-]+//g;s/-fcf-protection//g')"
RUSTFLAGS="$(echo "$RUSTFLAGS" | sed -E 's/\s*-C\s*target-cpu=[0-9a-zA-Z]+//')"
cd web
npm run build:repro
}
check() {
cd "$srcdir/ruffle"
export RUSTUP_TOOLCHAIN=stable
cargo test --frozen \
--package=ruffle_desktop \
--package=ruffle_scanner \
--package=exporter
cd web
npm run test
}
package_ruffle() {
depends=("hicolor-icon-theme" "alsa-lib" "systemd-libs" "libgcc" "glibc")
pkgdesc+=" (Desktop app and utils)"
cd "$srcdir/ruffle"
local f
find target/release -maxdepth 1 -executable -type f | while read -r f
do
local target
target="$(basename "$f")"
target=${target/_/-}
if ! [[ "$target" =~ ^ruffle- ]]
then
target="ruffle-$target"
fi
if [[ "$target" == "ruffle-desktop" ]]
then
target="ruffle"
fi
echo "Installing $f to $target..."
install -Dm755 "$f" "$pkgdir/usr/bin/$target"
done
install -Dm644 desktop/packages/linux/rs.ruffle.Ruffle.desktop \
"$pkgdir/usr/share/applications/rs.ruffle.Ruffle.desktop"
install -Dm644 desktop/packages/linux/rs.ruffle.Ruffle.metainfo.xml \
"$pkgdir/usr/share/metainfo/rs.ruffle.Ruffle.metainfo.xml"
install -Dm644 desktop/packages/linux/rs.ruffle.Ruffle.svg \
"$pkgdir/usr/share/icons/hicolor/scalable/apps/rs.ruffle.Ruffle.svg"
install -Dm644 LICENSE.md \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE.md"
install -Dm644 README.md \
"$pkgdir/usr/share/doc/ruffle/README.md"
}
package_ruffle-demo() {
pkgdesc+=" (Demo web app)"
arch=("any")
cd "$srcdir/ruffle"
mkdir -p "$pkgdir/usr/share/webapps"
cp -a --no-preserve=ownership \
web/packages/demo/dist \
"$pkgdir/usr/share/webapps/ruffle"
install -Dm644 web/packages/demo/LICENSE_APACHE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
install -Dm644 web/packages/demo/LICENSE_MIT \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
install -Dm644 web/packages/demo/README.md \
"$pkgdir/usr/share/doc/ruffle/demo/README.md"
}
package_ruffle-selfhosted() {
pkgdesc+=" (JavaScript module)"
arch=("any")
cd "$srcdir/ruffle"
mkdir -p \
"$pkgdir/usr/lib/node_modules" \
"$pkgdir/usr/share/licenses/$pkgname"
cp -a --no-preserve=ownership \
web/packages/selfhosted/dist \
"$pkgdir/usr/lib/node_modules/ruffle"
ln -srfv \
"$pkgdir/usr/lib/node_modules/ruffle/LICENSE_APACHE" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
ln -srfv \
"$pkgdir/usr/lib/node_modules/ruffle/LICENSE_MIT" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
install -Dm644 web/packages/selfhosted/README.md \
"$pkgdir/usr/share/doc/ruffle/selfhosted/README.md"
}
package_firefox-extension-ruffle() {
optdepends=("firefox: Load extension in browser.")
pkgdesc+=" (Unsigned Firefox extension)"
arch=("any")
cd "$srcdir/ruffle"
install -Dm644 web/packages/extension/dist/firefox_unsigned.xpi \
"$pkgdir/usr/lib/firefox/browser/extensions/$_FIREFOX_EXTENSION_ID.xpi"
install -Dm644 web/packages/extension/LICENSE_APACHE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
install -Dm644 web/packages/extension/LICENSE_MIT \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
}
package_chromium-extension-ruffle() {
optdepends=("chromium: Load extension in browser.")
pkgdesc+=" (Chromium extension)"
arch=("any")
cd "$srcdir/ruffle"
local extension_id=donbcfbmhbcapadipfkeojnmajbakjdc # https://chromewebstore.google.com/detail/ruffle-flash-emulator/donbcfbmhbcapadipfkeojnmajbakjdc
echo "Installing chromium extension $extension_id..."
jq --null-input --raw-output \
--arg external_update_url https://clients2.google.com/service/update2/crx \
'$ARGS.named' | \
install -Dm644 "/dev/stdin" \
"$pkgdir/usr/share/chromium/extensions/$extension_id.json"
install -Dm644 web/packages/extension/LICENSE_APACHE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_APACHE"
install -Dm644 web/packages/extension/LICENSE_MIT \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE_MIT"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Low | 2 |
| 2026-10-31 00:07:41 | Low | 2 |
| 2026-10-30 00:29:30 | Low | 2 |
| 2026-10-29 00:13:55 | Low | 2 |
| 2026-10-28 00:06:54 | Low | 2 |
| 2026-10-27 00:23:28 | Low | 2 |
| 2026-10-26 00:12:40 | Low | 2 |
| 2026-10-25 00:20:48 | Low | 2 |
| 2026-10-24 00:14:55 | Low | 2 |
| 2026-10-23 00:02:19 | Low | 2 |
| 2026-10-22 00:13:10 | Low | 2 |
| 2026-10-21 00:12:50 | Low | 2 |
| 2026-10-20 00:10:31 | Low | 2 |
| 2026-10-19 00:03:55 | Low | 2 |
| 2026-10-18 00:06:55 | Low | 2 |
| 2026-10-17 00:21:55 | Low | 2 |
| 2026-10-16 00:12:47 | Low | 2 |
| 2026-10-15 00:28:05 | Low | 2 |
| 2026-10-14 00:06:47 | Low | 2 |
| 2026-10-13 00:23:45 | Low | 2 |