Как проверить надежность обработки файлов моего сценария оболочки?

Tuve este problema y se resolvió instalando libz -dev:

sudo apt-get install libz-dev

Esto está relacionado con el último error que tuviste(configure: error: *** zlib.h missing - please install first or check config.log ***). No sé por qué tiene advertencias, pero pueden solucionarse reinstalando (o instalando )libz -dev.

Encontré la solución aquí:https://stackoverflow.com/a/38277221/4215651

11
13.04.2017, 15:36
1 ответ

Создайте отдельный каталог для воспроизведения (в основном для удобства очистки позже); При этом используется значение $TMPDIR, если оно задано, в противном случае /tmp:

mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"

Создайте файлы, которые являются отдельными, но выглядят похожими друг на друга из-за пробелов (пробел, табуляция, новая строка, возврат каретки, backspace):

touch -- a b 'a ' 'b ' 'a b' 'a  b' $'a\bb'
touch -- a$'\xe2\x80\x82'b a$'\xe2\x80\x83'b a$'\t'b a$'\n'b a$'\r'b

Кредит за вышесказанное на Patrick. Два шестнадцатеричных кода являются разделителями пространства UTF-8, известными как nut и mutton; «В двунаправленном контексте он действует как белое пространство и (не является) зеркальным. Глиф(ы) может, при определенных обстоятельствах, путать с 20 другими глифами».

Создайте простой файл, который расширялся бы до первого, если бы он рассматривался как глобус:

touch -- x '[x]' 

Кредит за вышесказанное Wumpus Q. Wumbley.

В аналогичном ключе:

touch -- 'a?b' 'a*b'

Заслуга в вышесказанном dave_thompson_085 в комментариях здесь.

touch -- foo\`echo\ malicious\`bar

Заслуга в вышесказанном godlygeek.

Имя файла, которое будет расширяться до чего-то другого (и потенциально произвольного выполнения!) при вычислении в контексте оболочки:

touch '$( echo boom )'

Use:

touch -- single\'quote double\"quote back\\slash

, чтобы уловить попытки поместить имя файла в кавычки без экранирования кавычек.

touch -- -a -b -c -r -R - a=x

Заслуга в вышесказанном принадлежит Стефану Шазеласу.

Создайте именованный канал и символьную ссылку (для создания файлов, которые не являются «обычными»)

mkfifo fifo
ln -s a alink

Создайте подкаталоги с различными пробелами, включенными в их имена, вместе с файлами маркеров внутри них:

mkdir subdir "subdir 1" "subdir 2" "subdir 3 " subdir$'\n'4
touch subdir/file0 "subdir 1"/file1 "subdir 2"/file2 "subdir 3 "/file3 subdir$'\n'4/file4

Создавайте имена файлов, содержащие только * (возможно, проблематично удалить), имя файла, состоящее только из (обычного!) пробела, мертвая символьная ссылка, символическая ссылка, которая зацикливается на себе, и подкаталог со ссылкой на родительский каталог:

touch -- '*' '**' '***' ' '

ln -s /does/not/exist dead

ln -s loop loop

mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)

More misc filenames. Последние два являются юникодом для «дробной косой черты» и «разделительной косой черты».

touch -- '(' '!' '!!'  $'\xe2\x81\x84' $'\xe2\x88\x95'

Идеи Скотта:

touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'

Символы, которые безвредны в одних локациях, но опасны в других:

touch $'X\xa0Y' # non-breaking space in iso8859-1 which is considered
                # "blank" and "space" in some locales

touch $'\xa3\x5c' $'\xa3\x60' # α and ε in BIG5 or BIG5-HKSCS charset, but
                              # �\ and �` in ASCII

Символы, которые сортируются одинаково в некоторых локалах:

touch ① ② # sorts the same in GNU locales, order non-deterministic.

Файлы, которые не соответствуют . [!.] * * glob (иногда используется для расширения как скрытых, так и нескрытых файлов):

touch ..foo ...
12
27.01.2020, 19:59

Теги

Похожие вопросы