(1.4.7)
この件は BugTrack2/151 の対策中に発生した不具合の修正です。
test.php <?php $a = array(); $a['dfsfsd'] = 1148083281; $a['5344'] = 1148083151; $a['88'] = 1148000281; var_dump($a); $a = array_splice($a, 0, 3); var_dump($a); ?>
出力結果 array(3) { ["dfsfsd"]=> int(1148083281) [5344]=> <= この時点で文字列ではない int(1148083151) [88]=> int(1148000281) } array(3) { ["dfsfsd"]=> int(1148083281) [0]=> <= 整数の添え字がクリアされている int(1148083151) [1]=> <= int(1148000281) }
実際の修正内容 // Cut unused lines - $recent_pages = array_splice($recent_pages, 0, $maxshow + PKWK_MAXSHOW_ALLOWANCE); + // BugTrack2/179: array_splice() will break integer keys in hashtable + $count = $maxshow + PKWK_MAXSHOW_ALLOWANCE; + $_recent = array(); + foreach($recent_pages as $key=>$value) { + unset($recent_pages[$key]); + $_recent[$key] = $value; + if (--$count < 1) break; + } + $recent_pages = & $_recent;
bugtrack プラグインで、ページ名に数値 (9 とか 99 とか) を指定すると、 ページは正しく作成されるのですが、最新の ?? 件に 0 とか 1 とかの 存在しないページ名が表示されてしまいます。
// bugtrack.inc.php // ページ名が指定されているなら二度書き込む if ($pagename == '') { page_write($page, $postdata); } else { $pagename = get_fullname($pagename, $base); if (is_page($pagename) || ! is_pagename($pagename)) { $pagename = $page; // Set default } else { page_write($page, 'move to [[' . $pagename . ']]'); } page_write($pagename, $postdata); }
// Cut unused lines $recent_pages = array_splice($recent_pages, 0, $maxshow + PKWK_MAXSHOW_ALLOWANCE);
// Check ALL filetime $recent_pages = array(); foreach($pages as $page) if ($page != $whatsnew && ! check_non_list($page)) $recent_pages[$page] = get_filetime($page); // <= HERE