Skip to content

Commit 5e4e2c2

Browse files
committed
Reject invalid prebuilt archive names
1 parent d242726 commit 5e4e2c2

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

pythons/test/update.sh

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,25 @@ bash ./update.sh >/dev/null 2>&1 || fail "second update failed"
4747
cmp -s index.before index.html || fail "second update changed index.html"
4848
[ "$(grep -Fxc "$entry" index.html)" -eq 1 ] || fail "prebuilt archive is listed more than once"
4949

50+
bad_name=$'bad\nname'
51+
printf 'archive=bad\narchive=name.tar.gz\n' > "binaries/$bad_name.meta"
52+
printf archive-data > "binaries/$bad_name.tar.gz"
53+
printf definition > "binaries/$bad_name"
54+
rm "$sha"
55+
if output="$(bash ./update.sh 2>&1)"; then
56+
fail "update accepted a control character in an archive name"
57+
fi
58+
case "$output" in
59+
*"Invalid archive name in binaries/"*) ;;
60+
*) fail "update did not reject the invalid archive name during validation" ;;
61+
esac
62+
[ ! -e "$sha" ] || fail "update created a checksum link before name validation completed"
63+
rm "binaries/$bad_name.meta" "binaries/$bad_name.tar.gz" "binaries/$bad_name"
64+
5065
mkdir source
5166
printf source-data > source/example.tar.gz
5267
printf '<li><a href="">example.tar.gz</a></li>\n' >> index.html
5368
cp index.html index.before
54-
rm "$sha"
5569
cp binaries/3.14.0-ubuntu-24.04-x86_64.meta binaries/z-invalid.meta
5670
sed -i 's/^archive=.*/archive=invalid.tar.gz/' binaries/z-invalid.meta
5771
if bash ./update.sh >/dev/null 2>&1; then

pythons/update.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ for meta in binaries/*.meta; do
6161
[ -e "$meta" ] || continue
6262
name="$(basename "$meta" .meta)"
6363
archive="$(sed -n 's/^archive=//p' "$meta")"
64+
case "$archive" in
65+
"" | *[!A-Za-z0-9._-]*)
66+
echo "Invalid archive name in $meta" >&2
67+
exit 1
68+
;;
69+
esac
6470
if [ "$archive" != "$name.tar.gz" ]; then
6571
echo "Invalid archive in $meta" >&2
6672
exit 1

0 commit comments

Comments
 (0)