2019-04-23 14:23:33 +00:00
|
|
|
#!/usr/bin/env bash
|
2013-01-18 08:41:41 +00:00
|
|
|
# Usage: pyenv version-file-read <file>
|
2012-08-31 06:23:41 +00:00
|
|
|
set -e
|
|
|
|
[ -n "$PYENV_DEBUG" ] && set -x
|
|
|
|
|
|
|
|
VERSION_FILE="$1"
|
|
|
|
|
2022-05-06 16:51:51 +00:00
|
|
|
if [ -s "$VERSION_FILE" ]; then
|
2013-01-18 09:57:08 +00:00
|
|
|
# Read the first non-whitespace word from the specified version file.
|
|
|
|
# Be careful not to load it whole in case there's something crazy in it.
|
2014-03-24 09:15:40 +00:00
|
|
|
IFS="${IFS}"$'\r'
|
2022-05-06 16:51:51 +00:00
|
|
|
sep=
|
|
|
|
while read -n 1024 -r version _ || [[ $version ]]; do
|
2022-07-16 22:01:04 +00:00
|
|
|
if [[ -z $version || $version == \#* ]]; then
|
|
|
|
# Skip empty lines and comments
|
|
|
|
continue
|
|
|
|
elif [ "$version" = ".." ] || [[ $version == */* ]]; then
|
|
|
|
# The version string is used to construct a path and we skip dubious values.
|
|
|
|
# This prevents issues such as path traversal (CVE-2022-35861).
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
printf "%s%s" "$sep" "$version"
|
|
|
|
sep=:
|
2022-05-06 16:51:51 +00:00
|
|
|
done <"$VERSION_FILE"
|
|
|
|
[[ $sep ]] && { echo; exit; }
|
2012-08-31 06:23:41 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
exit 1
|