ap_sub_req_lookup_file() の仕様を勘違いしていた

translate_name に hook をかけてそこで ap_sub_req_lookup_file() したところ,セグフォってしまいました。

んーなんでだろうと思って [http://httpd.apache.org/docs/2.2/mod/mpm_common.html#coredumpdirectory:title=CoreDumpDirectory] を指定して core を解析したら ap_make_dirstr_parent(rnew->pool, r->filename) を呼んでるとこで落ちてました。

translate_name hook が呼ばれた時点では r->filename は設定されていない((それを設定するのが translate_name hook の役目ですからね。))のですが,その r->filenameNULL になってる)を元に親ディレクトリを算出しようとして不正アクセスが発生した模様。

とりあえず呼び出し前に

r->filename           = "";
r->canonical_filename = "";

したら大丈夫になりました。


まあつまり ap_sub_req_lookup_file() の引数って現在のリクエスト対象のファイルからの「相対パス」で指定するってことだったんですね。絶対パス指定しておけばいいだろうと思ってたのが間違いでした。この関数を利用している他のモジュールの呼び出し箇所を洗い出して勉強しとかなきゃ。

なお,上記対処法でロジック的に問題ないことは一応追ってあります。