list, backup, topicpath, attach などのプラグインでリスト表示する内容がないなどの理由で body 部分に '' を返す場合があります.
このとき,$defaultpage が表示される仕様になっているとおもいます. このとき,閲覧者に $defaultpage に閲覧権限があるかどうかチェックされることなく,表示されてしまいます.
プラグイン側で空を返さないようにする方法は,私程度でも対処できそうでした.list の例だと
--- list.inc.php.orig 2006-09-02 11:49:20.000000000 +0900 +++ list.inc.php 2006-08-15 20:04:16.000000000 +0900 @@ -19,12 +19,12 @@ // Get a list function plugin_list_getlist($withfilename = FALSE) { - global $non_list, $whatsnew; + global $non_list, $whatsnew, $_err_notexist; $pages = array_diff(get_existpages(), array($whatsnew)); if (! $withfilename) $pages = array_diff($pages, preg_grep('/' . $non_list . '/S', $pages)); - if (empty($pages)) return ''; + if (empty($pages)) return $_err_notexist; return page_list($pages, 'read', $withfilename); }
※ $_err_notexist は,現在は yetlist 専用なので '該当項目はありません' や '表示すべき内容はありません' とかに変える必要があると思います.
しかし,該当するプラグインは多く,やはり本体側で対処すべき問題ではないかと思います.対処法は
すみませんが,私では,プラグインから帰ってきたときに $defaultpage を表示している部分を見つけられずパッチを作れませんでした.
恐れりますが,よろしくお願いします.
関連:BugTrack/366 -- yetlist が空を返すときの対処
lib/pukiwki.ini で返された $body が null で,$base も null のときは,閲覧権限のチェックなしで $defaultpage が表示されているようです. そこで,check_readable をその前に呼び出して,閲覧権限をチェックするようにしました.
--- pukiwiki.php.orig 2007-02-03 01:02:33.000000000 +0900 +++ pukiwiki.php 2007-02-03 01:34:44.000000000 +0900 @@ -112,6 +112,7 @@ $body = & $retvars['body']; } else { if ($base == '' || ! is_page($base)) { + check_readable($defaultpage, true, true); $base = & $defaultpage; $title = htmlspecialchars(strip_bracket($base)); $page = make_search($base);
pukiwki-1.4.7 用です.よろしければ,採用していただければと思います.