hyudai28 / minishell_42

0 stars 1 forks source link

エッジケース共 #16

Open hyudai28 opened 2 years ago

hyudai28 commented 2 years ago

42tokyoのレビューから引用

hyudai28 commented 2 years ago

環境変数がない場合にexportを打つと、(null)が表示されるバグが見つかりました。

hyudai28 commented 2 years ago

環境変数PATHに"::"が入ったときカレントディレクトリの検索が走らない点

hyudai28 commented 2 years ago

SHELLの環境変数セットアップが走っていない点

hyudai28 commented 2 years ago

minishellで改行だけをしたときにleakしていました

hyudai28 commented 2 years ago

echo -nnn のように複数のオプションを取るケースに対応されていませんでしたが、特殊なオプションのケースだとして処理しました。

hyudai28 commented 2 years ago

シングルクオーテーション二つだけの入力時のエラー対応。

hyudai28 commented 2 years ago

"export _"をした後にenvをすると無限ループ。

hyudai28 commented 2 years ago

環境変数なしで起動した時のリーク。

hyudai28 commented 2 years ago

cd: /(ルートディレクトリ)に移動できませんでした。レビュー中は権限の問題かなという話になったので問題なしとしています。レビュー後に検証したところcd ..だと移動できなかったのですが、cd /だと移動できたので怪しげです。

hyudai28 commented 2 years ago

実行ユーザーのpwd: PWDを実行した際にbashでは/tmp/minishellと表示されるところが/private/tmp/minishellになっていた、ワカモレ上で/tmpが/private/tmpにシンボリックリンクが貼られていて、getcwd関数だとシンボリックリンクを解釈してしまうみたいでした。

hyudai28 commented 2 years ago

リダイレクト時にファイルディスクリプタを渡せませんでしたが、pedageで対応しなくて良いと回答がありました。

hyudai28 commented 2 years ago

/dev/urandom cat | head -n 1を実行した際にpermission deniedと表示されました

hyudai28 commented 2 years ago

expr $? + $?を実行すると0と2が交互にでましたが、こちらについてはexprコマンドのmanを確認するとexprは評価値が0になる場合はexit statusとして1を返すみたいでした。

hyudai28 commented 2 years ago

pipeとredirectionを組み合わせた cat Makefile | grep make > test.txt などのコマンドを実行した際に、既存の test.txt の上部に文字が書き加えられるという動作を行ってしまっていたため、redirection のみ no をつけさせていただきました。

hyudai28 commented 2 years ago

"" や "." で微妙に違う挙動でした。

hyudai28 commented 2 years ago

cd /tmp/../../ などで、heap use after free や、chdir(NULL) という挙動になっていました。

hyudai28 commented 2 years ago

<< "" で static 変数を double free していました。

hyudai28 commented 2 years ago

expand する際に、 echo "'$foo'" で 'bar' になるはずのところ 'bar " になっていました。

hyudai28 commented 2 years ago

プロンプトに何か入力された状態でシグナルを受け取る時にminishellが終了してしまう。

hyudai28 commented 2 years ago

環境変数が渡されずにminishellを起動すると環境変数関連のコマンドが動作しない。

hyudai28 commented 2 years ago

ビルトインコマンドのエラー時の終了ステータスが反映されていない(レビューではcdのみ検出)。

hyudai28 commented 2 years ago

リダイレクトでfdにマイナスの値を渡すとセグフォしてしまう。

hyudai28 commented 2 years ago

fdの最大値 < リダイレクト先のfd < INT_MAXのようなfdを渡す際にopenでのエラーハンドリングが必要。

hyudai28 commented 2 years ago

サニタイザをつけると、tokenizerあたりでoverflowを起こしてabortしている。

hyudai28 commented 2 years ago

pipe関数がwhile内で使用されいて、fdがcloseされていなかったので、多段パイプを500個くらい繋げたところ、パイプが動かなくなりました。

hyudai28 commented 2 years ago

'command |'のあとにスペースだけを入れた入力で、syntax errorの出力の後、free時のNULL詰め処理に不具合がありセグフォしたのでcrashフラグを立てました

hyudai28 commented 2 years ago

環境変数の区切り文字がbashと異なり、想定の動作とは異なる動作が行われていました。 export の処理で 環境変数の文字列の追加の処理が行われていませんでした。

hyudai28 commented 2 years ago

minishell内でmisnishellを呼んだ後にexitすると常にecho $?が1になってしまいます。

hyudai28 commented 2 years ago

unsetのエラーメッセージがexportのものになっていました。

hyudai28 commented 2 years ago

catの後のctrl+DでDが表示されてしまいます。

hyudai28 commented 2 years ago

./minishell ./minishell exit 1

hyudai28 commented 2 years ago

Ctrl+Dを押すとそれまでコマンドラインに入力していた内容がフラッシュされてしまいました。

hyudai28 commented 2 years ago

1024byteを超えるコマンドが入力できないようになってしまうので、改善が必要だと思います。

hyudai28 commented 2 years ago

" "のようにクオートした空白文字だけをコマンドラインに入力すると、echo $?の出力が258に変わってしまう。

hyudai28 commented 2 years ago

echo a " " b の出力はa b(4文字)であるべきだが、a b(3文字)になる。

hyudai28 commented 2 years ago

export VARのように値を代入せずに定義した場合、exportで表示されない。

hyudai28 commented 2 years ago

export A=1 123のようにexportの2つ目以降の引数がスルーされている。

hyudai28 commented 2 years ago

unsetも2つ目以降の引数がスルーされている。

hyudai28 commented 2 years ago

Guacamoleにおいて/tmp以下にいる時のpwdの出力が/private/tmp...になる。

hyudai28 commented 2 years ago

カレントディレクトリの実行権限(x)がない状態で cd ..がPermission deniedで失敗する。

hyudai28 commented 2 years ago

カレントディレクトリにパスが通っていない状態で、カレントディレクトリの実行ファイルを./なしで実行できてしまう。

hyudai28 commented 2 years ago

unset PATHの後にexport PATH=/binしてもlsなど/binにいるコマンドが見つからない。

hyudai28 commented 2 years ago

子プロセスの実行部分に多数のリークがありました(getpid()とleaksコマンドを組み合わせてデストラクタに設定することで検知可能でした)

hyudai28 commented 2 years ago

echo printfのエラーハンドリングが漏れていました

hyudai28 commented 2 years ago

stdoutがcloseされていると正常に動作しませんでした。fd 1がopenされていることを期待した実装になっているようです。(原因を特定し忘れました分かったら教えて!)

hyudai28 commented 2 years ago

名前付きpipeへのリダイレクトでブロッキングされませんでした(原因を特定し忘れました分かったら教えて!)

hyudai28 commented 2 years ago

exit 後ろのスペースがtrimされませんでした

hyudai28 commented 2 years ago

signal ハンドラの設定が呼び出し元から引き継がれませんでした。ハンドラが非同期安全ではありませんでした

hyudai28 commented 2 years ago

export +=が実装されていませんでした

hyudai28 commented 2 years ago

存在しないdirから起動できませんでした