mirror of https://github.com/CIRCL/Circlean
make the archive bomb handling code wotking properly
parent
016c0a681b
commit
37a2856638
|
@ -1,13 +1,14 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
set -x
|
#set -x
|
||||||
|
|
||||||
source ./constraint.sh
|
source ./constraint.sh
|
||||||
source ./constraint_conv.sh
|
source ./constraint_conv.sh
|
||||||
|
|
||||||
RECURSIVE_ARCHIVE_MAX=3
|
RECURSIVE_ARCHIVE_MAX=3
|
||||||
RECURSIVE_ARCHIVE_CURRENT=0
|
RECURSIVE_ARCHIVE_CURRENT=0
|
||||||
|
ARCHIVE_BOMB=0
|
||||||
|
|
||||||
copy(){
|
copy(){
|
||||||
src_file=${1}
|
src_file=${1}
|
||||||
|
@ -44,13 +45,18 @@ video(){
|
||||||
|
|
||||||
archive(){
|
archive(){
|
||||||
echo Archive file ${1}
|
echo Archive file ${1}
|
||||||
src_file=${1}
|
if [ ${ARCHIVE_BOMB} -eq 0 ]; then
|
||||||
dst_dir=${2}
|
temp_extract_dir=${2}_temp
|
||||||
temp_extract_dir=${dst_dir}_temp
|
mkdir -p ${temp_extract_dir}
|
||||||
mkdir -p ${temp_extract_dir}
|
${UNPACKER} x ${1} -o${temp_extract_dir} -bd
|
||||||
${UNPACKER} x ${src_file} -o${temp_extract_dir} -bd
|
main ${2} ${RECURSIVE_ARCHIVE_CURRENT} ${temp_extract_dir} || true
|
||||||
main ${dst_dir} ${RECURSIVE_ARCHIVE_CURRENT} ${temp_extract_dir}
|
rm -rf ${temp_extract_dir}
|
||||||
rm -rf ${temp_extract_dir}
|
fi
|
||||||
|
if [ ${ARCHIVE_BOMB} -eq 1 ]; then
|
||||||
|
rm -rf ${2}
|
||||||
|
rm -rf ${2}_temp
|
||||||
|
fi
|
||||||
|
CURRENT_SRC=${SRC}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -82,7 +88,7 @@ application(){
|
||||||
echo "Win executable"
|
echo "Win executable"
|
||||||
copy ${src_file} ${dst_file}_DANGEROUS
|
copy ${src_file} ${dst_file}_DANGEROUS
|
||||||
;;
|
;;
|
||||||
x-gzip|x-7z-compressed)
|
x-gzip|x-tar|x-7z-compressed)
|
||||||
echo "Compressed file"
|
echo "Compressed file"
|
||||||
archive ${src_file} ${dst_file}
|
archive ${src_file} ${dst_file}
|
||||||
;;
|
;;
|
||||||
|
@ -126,24 +132,17 @@ main(){
|
||||||
echo "Please specify the destination directory."
|
echo "Please specify the destination directory."
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
# first param is the destination dir
|
|
||||||
dest=${1}
|
|
||||||
|
|
||||||
if [ -z ${2} ]; then
|
if [ -z ${2} ]; then
|
||||||
CURRENT_SRC=${SRC}
|
CURRENT_SRC=${SRC}
|
||||||
else
|
|
||||||
CURRENT_SRC=${2}
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ -z ${2} ]; then
|
|
||||||
RECURSIVE_ARCHIVE_CURRENT=0
|
RECURSIVE_ARCHIVE_CURRENT=0
|
||||||
|
ARCHIVE_BOMB=0
|
||||||
else
|
else
|
||||||
RECURSIVE_ARCHIVE_CURRENT=${2}
|
RECURSIVE_ARCHIVE_CURRENT=${2}
|
||||||
CURRENT_SRC=${3}
|
CURRENT_SRC=${3}
|
||||||
if [ ${RECURSIVE_ARCHIVE_CURRENT} -gt ${RECURSIVE_ARCHIVE_MAX} ]; then
|
if [ ${RECURSIVE_ARCHIVE_CURRENT} -gt ${RECURSIVE_ARCHIVE_MAX} ]; then
|
||||||
echo Archive bomb.
|
echo Archive bomb.
|
||||||
rm -rf ${CURRENT_SRC}
|
ARCHIVE_BOMB=1
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
RECURSIVE_ARCHIVE_CURRENT=`expr ${RECURSIVE_ARCHIVE_CURRENT} + 1`
|
RECURSIVE_ARCHIVE_CURRENT=`expr ${RECURSIVE_ARCHIVE_CURRENT} + 1`
|
||||||
|
@ -153,11 +152,14 @@ main(){
|
||||||
FILE_COMMAND='file -b --mime-type'
|
FILE_COMMAND='file -b --mime-type'
|
||||||
FILE_LIST=`find ${CURRENT_SRC} -type f`
|
FILE_LIST=`find ${CURRENT_SRC} -type f`
|
||||||
for file in ${FILE_LIST}; do
|
for file in ${FILE_LIST}; do
|
||||||
|
# first param is the destination dir
|
||||||
|
dest=${1}
|
||||||
|
|
||||||
mime=`$FILE_COMMAND ${file}`
|
mime=`$FILE_COMMAND ${file}`
|
||||||
echo ${mime}
|
echo ${mime}
|
||||||
main=`echo ${mime} | cut -f1 -d/`
|
main_mime=`echo ${mime} | cut -f1 -d/`
|
||||||
details=`echo ${mime} | cut -f2 -d/`
|
details=`echo ${mime} | cut -f2 -d/`
|
||||||
case "${main}" in
|
case "${main_mime}" in
|
||||||
"text")
|
"text")
|
||||||
text ${file} ${dest}
|
text ${file} ${dest}
|
||||||
;;
|
;;
|
||||||
|
@ -187,7 +189,7 @@ main(){
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "This should never happen... :]"
|
echo "This should never happen... :]"
|
||||||
echo $mime $main $details
|
echo $mime $main_mime $details
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in New Issue