map プラグインが無限ループに陥り、Internal Server Error になる

  • ページ: BugTrack
  • 投稿者: mizkaz
  • 優先順位: 重要
  • 状態: 完了
  • カテゴリー: プラグイン
  • 投稿日: 2003-04-16 (水) 15:43:15
  • バージョン: 1.4

メッセージ

現象を絞り込めていないので、具体的な発生手順を書きます。

  1. FormatRule ページを削除
  2. InterWikiを起点としたサイトマップを表示させる

すると、僕のところでは Internal Server Error となります。 以下 URL に、ここのテスト用の環境で再現させました*1

http://pukiwiki.sourceforge.jp/pukiwiki1.4/pukiwiki.php?plugin=map&refer=InterWiki

map プラグインの MapNode クラスの toString メソッドで無限ループに陥っているようです。


  • 参照ページから届かないページ(not related from)を列挙するときに、循環参照を止める番兵(parent_id=-1)を入れ忘れていました XD chainメソッド内でチェックするようにしたので、これで大丈夫だと思います。 -- ぱんだ 2003-04-17 (木) 11:02:48
    --- map.inc.php	3 Apr 2003 01:36:49 -0000	1.9
    +++ map.inc.php	17 Apr 2003 02:02:15 -0000
    @@ -22,7 +22,7 @@
     */
     
     function plugin_map_action()
    -{ error_reporting(E_ALL);
    +{
     	global $vars,$whatsnew,$defaultpage;
     	
     	$reverse = array_key_exists('reverse',$vars);
    @@ -88,7 +88,6 @@
     	}
     	else
     	{
    -		$nodes[$refer]->parent_id = -1;
     		$nodes[$refer]->chain($nodes);
     		$retval['body'] .= "<ul>\n".$nodes[$refer]->toString($nodes)."</ul>\n";
     		$retval['body'] .= "<hr /><p>not related from ".htmlspecialchars($refer)."</p>\n";
    @@ -168,6 +167,12 @@
     			return;
     		}
     		$this->done = TRUE;
    +		
    +		if ($this->parent_id == 0)
    +		{
    +			$this->parent_id = -1;
    +		}
    +		
     		foreach ($this->rels as $page)
     		{
     			if (!array_key_exists($page,$nodes))
  • cvsに投入しました。 cvs:plugin/map.inc.php(v1.4:r1.10) -- ぱんだ 2003-04-17 (木) 11:09:39
  • 大丈夫みたいですね。直りました。 -- mizkaz 2003-04-17 (木) 14:51:19

*1 ここの場合メモリが枯渇する

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2003-04-17 (木) 14:51:37
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.157 sec.

OSDN