Open hyudai28 opened 2 years ago
環境変数がない場合にexportを打つと、(null)が表示されるバグが見つかりました。
環境変数PATHに"::"が入ったときカレントディレクトリの検索が走らない点
SHELLの環境変数セットアップが走っていない点
minishellで改行だけをしたときにleakしていました
echo -nnn のように複数のオプションを取るケースに対応されていませんでしたが、特殊なオプションのケースだとして処理しました。
シングルクオーテーション二つだけの入力時のエラー対応。
"export _"をした後にenvをすると無限ループ。
環境変数なしで起動した時のリーク。
cd: /(ルートディレクトリ)に移動できませんでした。レビュー中は権限の問題かなという話になったので問題なしとしています。レビュー後に検証したところcd ..だと移動できなかったのですが、cd /だと移動できたので怪しげです。
実行ユーザーのpwd: PWDを実行した際にbashでは/tmp/minishellと表示されるところが/private/tmp/minishellになっていた、ワカモレ上で/tmpが/private/tmpにシンボリックリンクが貼られていて、getcwd関数だとシンボリックリンクを解釈してしまうみたいでした。
リダイレクト時にファイルディスクリプタを渡せませんでしたが、pedageで対応しなくて良いと回答がありました。
/dev/urandom cat | head -n 1
を実行した際にpermission deniedと表示されました
expr $? + $?を実行すると0と2が交互にでましたが、こちらについてはexprコマンドのmanを確認するとexprは評価値が0になる場合はexit statusとして1を返すみたいでした。
pipeとredirectionを組み合わせた cat Makefile | grep make > test.txt などのコマンドを実行した際に、既存の test.txt の上部に文字が書き加えられるという動作を行ってしまっていたため、redirection のみ no をつけさせていただきました。
"" や "." で微妙に違う挙動でした。
cd /tmp/../../ などで、heap use after free や、chdir(NULL) という挙動になっていました。
<< "" で static 変数を double free していました。
expand する際に、 echo "'$foo'" で 'bar'
になるはずのところ 'bar "
になっていました。
プロンプトに何か入力された状態でシグナルを受け取る時にminishellが終了してしまう。
環境変数が渡されずにminishellを起動すると環境変数関連のコマンドが動作しない。
ビルトインコマンドのエラー時の終了ステータスが反映されていない(レビューではcdのみ検出)。
リダイレクトでfdにマイナスの値を渡すとセグフォしてしまう。
fdの最大値 < リダイレクト先のfd < INT_MAXのようなfdを渡す際にopenでのエラーハンドリングが必要。
サニタイザをつけると、tokenizerあたりでoverflowを起こしてabortしている。
pipe関数がwhile内で使用されいて、fdがcloseされていなかったので、多段パイプを500個くらい繋げたところ、パイプが動かなくなりました。
'command |'のあとにスペースだけを入れた入力で、syntax errorの出力の後、free時のNULL詰め処理に不具合がありセグフォしたのでcrashフラグを立てました
環境変数の区切り文字がbashと異なり、想定の動作とは異なる動作が行われていました。 export の処理で 環境変数の文字列の追加の処理が行われていませんでした。
minishell内でmisnishellを呼んだ後にexitすると常にecho $?が1になってしまいます。
unsetのエラーメッセージがexportのものになっていました。
catの後のctrl+DでDが表示されてしまいます。
./minishell ./minishell exit 1
Ctrl+Dを押すとそれまでコマンドラインに入力していた内容がフラッシュされてしまいました。
1024byteを超えるコマンドが入力できないようになってしまうので、改善が必要だと思います。
" "のようにクオートした空白文字だけをコマンドラインに入力すると、echo $?
の出力が258に変わってしまう。
echo a " " b
の出力はa b
(4文字)であるべきだが、a b
(3文字)になる。
export VAR
のように値を代入せずに定義した場合、export
で表示されない。
export A=1 123
のようにexportの2つ目以降の引数がスルーされている。
unset
も2つ目以降の引数がスルーされている。
Guacamoleにおいて/tmp
以下にいる時のpwd
の出力が/private/tmp...
になる。
カレントディレクトリの実行権限(x)がない状態で cd ..
がPermission deniedで失敗する。
カレントディレクトリにパスが通っていない状態で、カレントディレクトリの実行ファイルを./
なしで実行できてしまう。
unset PATH
の後にexport PATH=/bin
してもls
など/bin
にいるコマンドが見つからない。
子プロセスの実行部分に多数のリークがありました(getpid()とleaksコマンドを組み合わせてデストラクタに設定することで検知可能でした)
echo printfのエラーハンドリングが漏れていました
stdoutがcloseされていると正常に動作しませんでした。fd 1がopenされていることを期待した実装になっているようです。(原因を特定し忘れました分かったら教えて!)
名前付きpipeへのリダイレクトでブロッキングされませんでした(原因を特定し忘れました分かったら教えて!)
exit 後ろのスペースがtrimされませんでした
signal ハンドラの設定が呼び出し元から引き継がれませんでした。ハンドラが非同期安全ではありませんでした
export +=が実装されていませんでした
存在しないdirから起動できませんでした
42tokyoのレビューから引用