make the archive bomb handling code wotking properly

pull/10/head
Raphaël Vinot 2013-03-15 09:27:26 +01:00
parent 016c0a681b
commit 37a2856638
1 changed files with 23 additions and 21 deletions

View File

@ -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