mirror of
https://github.com/rehlds/reunion.git
synced 2024-12-27 06:45:29 +03:00
84 lines
1.7 KiB
Bash
Executable File
84 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
main()
|
|
{
|
|
files=($@)
|
|
|
|
declare -A threshold_version
|
|
threshold_version[CXXABI]="1.3.5"
|
|
threshold_version[GLIBCXX]="3.4.15"
|
|
threshold_version[GLIBC]="2.11"
|
|
|
|
for k in "${!threshold_version[@]}"; do
|
|
for f in "${files[@]}"
|
|
do
|
|
:
|
|
version=$(readelf -sV $f | sed -n 's/.*@'$k'_//p' | sort -u -V | tail -1 | cut -d ' ' -f 1)
|
|
|
|
# version no present - skipped
|
|
if [[ -z "$version" ]]; then
|
|
version="UND"
|
|
# version is private - skipped
|
|
elif [ "$version" = "PRIVATE" ]; then
|
|
version="PRV"
|
|
# ensure numeric
|
|
elif [[ $version =~ ^([0-9]+\.){0,2}(\*|[0-9]+)$ ]]; then
|
|
check_version_greater $version ${threshold_version[$k]}
|
|
if [[ $? -eq 1 ]]; then
|
|
echo -e "\033[0;31mAssertion failed:\033[0m Binary \033[0;32m${f}\033[0m has ${k}_\033[0;33m$version\033[0m greater than max version ${k}_\033[0;33m${threshold_version[$k]}\033[0m"
|
|
exit -1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [[ "$version" = "PRV" || "$version" = "UND" ]]; then
|
|
echo -e "[\033[0;90mSKIP\033[0m] \033[0;33m${version}\033[0m < ${k}_\033[0;33m${threshold_version[$k]}\033[0m"
|
|
else
|
|
echo -e "[\033[0;32mOK\033[0m] \033[0;33m${version}\033[0m < ${k}_\033[0;33m${threshold_version[$k]}\033[0m"
|
|
fi
|
|
done
|
|
}
|
|
|
|
check_version_greater()
|
|
{
|
|
if [[ -z "$1" || $1 == $2 ]]; then
|
|
return 0
|
|
fi
|
|
|
|
local IFS=.
|
|
local i ver1=($1) ver2=($2)
|
|
|
|
# fill empty fields in ver1 with zeros
|
|
for ((i = ${#ver1[@]}; i < ${#ver2[@]}; i++))
|
|
do
|
|
ver1[i]=0
|
|
done
|
|
|
|
for ((i = 0; i < ${#ver1[@]}; i++))
|
|
do
|
|
if [[ -z ${ver2[i]} ]]
|
|
then
|
|
# fill empty fields in ver2 with zeros
|
|
ver2[i]=0
|
|
fi
|
|
|
|
if ((10#${ver1[i]} > 10#${ver2[i]}))
|
|
then
|
|
return 1
|
|
fi
|
|
|
|
if ((10#${ver1[i]} < 10#${ver2[i]}))
|
|
then
|
|
break
|
|
fi
|
|
done
|
|
|
|
return 0
|
|
}
|
|
|
|
# Initialize
|
|
main $*
|
|
|
|
# Exit normally
|
|
exit 0
|