BugTrack/2250
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* 相対リンクで、意図しないページへのリンクになることがあ...
- ページ: [[BugTrack2]]
- 投稿者: 名無しさん
- 優先順位: 低
- 状態: 提案
- カテゴリー: 本体バグ
- 投稿日: 2007-06-23 (土) 15:17:34
- バージョン:
** メッセージ [#odc35b9a]
「[[0/1////5/6/7]]」のように途中の階層に空文字が含まれる...
上の階層のページから「[[.////5/6>.////5/6]]」のように指定...
空文字の部分を消去してしまうので「./5/6」と書いたのと同じ...
同じように、下の階層(ここでは「0/1////5/6/7」とする)か...
「0/1////5/6」ではなく「0/1/5/6」とされてしまいます。
途中の階層に空文字が含まれるページを許さないのなら、is_pa...
許すのならlib/make_link.php の修正となるのでしょうが、~
ひとまず[[cvs:lib/make_link.php]] (v 1.35) を修正すると仮...
// $Id: make_link.php,v 1.35 2006/09/30 02:10:50 henohen...
// Copyright (C)
// 2003-2005 PukiWiki Developers Team
(中略)
// Resolve relative / (Unix-like)absolute path of the page
function get_fullname($name, $refer)
{
global $defaultpage;
// 'Here'
if ($name == '' || $name == './') return $refer;
// Absolute path
if ($name{0} == '/') {
$name = substr($name, 1);
return ($name == '') ? $defaultpage : $name;
}
// Relative path from 'Here'
if (substr($name, 0, 2) == './') {
- $arrn = preg_split('#/#', $name, -1, PREG_SPLIT_NO...
- $arrn[0] = $refer;
- return join('/', $arrn);
+ return $refer . substr($name, 1);
}
// Relative path from dirname()
if (substr($name, 0, 3) == '../') {
- $arrn = preg_split('#/#', $name, -1, PREG_SPLIT_NO_E...
- $arrp = preg_split('#/#', $refer, -1, PREG_SPLIT_NO_E...
+ if (substr($name, -1) == '/')
+ $name = substr($name, 0, -1);
+ $arrn = explode('/', $name);
+ $arrp = explode('/', $refer);
while (! empty($arrn) && $arrn[0] == '..') {
array_shift($arrn);
array_pop($arrp);
}
$name = ! empty($arrp) ? join('/', array_merge($arrp, $...
(! empty($arrn) ? $defaultpage . '/' . join('/', $arrn...
}
return $name;
}
上では、「./hoge/」のように、最後が「/」である時のチェッ...
「./」とだけ書いた時は上のほうで処理してくれるので問題な...
「[[BugTrack2/]]」のように相対表記でない時は、このチェッ...
「../」の場合は、上階層のページそのものを指している時に、...
今いるページを指す$refer は、最後が「/」では無いはずです...
何らかの理由でそのようなページが存在した時のために、チェ...
階層を上がった結果が「0/1///」のようになってしまう可能性...
make_link.php ではこの処理を呼び出した直後に、is_pagename...
他の場所でもis_page() や、is_file() などを実行している((...
--------
//#comment
終了行:
* 相対リンクで、意図しないページへのリンクになることがあ...
- ページ: [[BugTrack2]]
- 投稿者: 名無しさん
- 優先順位: 低
- 状態: 提案
- カテゴリー: 本体バグ
- 投稿日: 2007-06-23 (土) 15:17:34
- バージョン:
** メッセージ [#odc35b9a]
「[[0/1////5/6/7]]」のように途中の階層に空文字が含まれる...
上の階層のページから「[[.////5/6>.////5/6]]」のように指定...
空文字の部分を消去してしまうので「./5/6」と書いたのと同じ...
同じように、下の階層(ここでは「0/1////5/6/7」とする)か...
「0/1////5/6」ではなく「0/1/5/6」とされてしまいます。
途中の階層に空文字が含まれるページを許さないのなら、is_pa...
許すのならlib/make_link.php の修正となるのでしょうが、~
ひとまず[[cvs:lib/make_link.php]] (v 1.35) を修正すると仮...
// $Id: make_link.php,v 1.35 2006/09/30 02:10:50 henohen...
// Copyright (C)
// 2003-2005 PukiWiki Developers Team
(中略)
// Resolve relative / (Unix-like)absolute path of the page
function get_fullname($name, $refer)
{
global $defaultpage;
// 'Here'
if ($name == '' || $name == './') return $refer;
// Absolute path
if ($name{0} == '/') {
$name = substr($name, 1);
return ($name == '') ? $defaultpage : $name;
}
// Relative path from 'Here'
if (substr($name, 0, 2) == './') {
- $arrn = preg_split('#/#', $name, -1, PREG_SPLIT_NO...
- $arrn[0] = $refer;
- return join('/', $arrn);
+ return $refer . substr($name, 1);
}
// Relative path from dirname()
if (substr($name, 0, 3) == '../') {
- $arrn = preg_split('#/#', $name, -1, PREG_SPLIT_NO_E...
- $arrp = preg_split('#/#', $refer, -1, PREG_SPLIT_NO_E...
+ if (substr($name, -1) == '/')
+ $name = substr($name, 0, -1);
+ $arrn = explode('/', $name);
+ $arrp = explode('/', $refer);
while (! empty($arrn) && $arrn[0] == '..') {
array_shift($arrn);
array_pop($arrp);
}
$name = ! empty($arrp) ? join('/', array_merge($arrp, $...
(! empty($arrn) ? $defaultpage . '/' . join('/', $arrn...
}
return $name;
}
上では、「./hoge/」のように、最後が「/」である時のチェッ...
「./」とだけ書いた時は上のほうで処理してくれるので問題な...
「[[BugTrack2/]]」のように相対表記でない時は、このチェッ...
「../」の場合は、上階層のページそのものを指している時に、...
今いるページを指す$refer は、最後が「/」では無いはずです...
何らかの理由でそのようなページが存在した時のために、チェ...
階層を上がった結果が「0/1///」のようになってしまう可能性...
make_link.php ではこの処理を呼び出した直後に、is_pagename...
他の場所でもis_page() や、is_file() などを実行している((...
--------
//#comment
ページ名: