Last modified: 2013-09-26 14:54:56 UTC
The following parser test fails when using hhvm. This is true when you use parserTests.php *or* phpunit.php. !! article File:Barfoo.jpg !! text #REDIRECT [[File:Barfoo.jpg]] !! endarticle !! test Redirected image !! input [[Image:Barfoo.jpg]] !! result <p><a href="/wiki/File:Barfoo.jpg" title="File:Barfoo.jpg">File:Barfoo.jpg</a> </p> !! end Not 100% sure why yet, seems like a new breakage in the last week. Definitely narrowed down to this individual test.
The recursion we're doing in (Cirrus)SearchUpdate is bad. I've been complaining about this but guess I've got a reason to fix it now :) We don't handle [[A]] redirecting to [[A]] well at all...which is what this test was doing and thus blowing up. Here's some xdebug output that helps show the problem: $ php parserTests.php --file=new.txt This is MediaWiki version 1.22alpha (50c30a7). PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in /www/mediawiki/core/includes/db/DatabaseMysqlBase.php on line 480 PHP Stack trace: PHP 1. {main}() /www/mediawiki/core/tests/parserTests.php:0 PHP 2. ParserTest->runTestsFromFiles() /www/mediawiki/core/tests/parserTests.php:92 PHP 3. ParserTest->runTests() /www/mediawiki/core/tests/parser/parserTest.inc:457 PHP 4. TestFileIterator->rewind() /www/mediawiki/core/tests/parser/parserTest.inc:473 PHP 5. TestFileIterator->next() /www/mediawiki/core/tests/testHelpers.inc:385 PHP 6. TestFileIterator->readNextTest() /www/mediawiki/core/tests/testHelpers.inc:399 PHP 7. ParserTest::addArticle() /www/mediawiki/core/tests/testHelpers.inc:429 PHP 8. WikiPage->doEditContent() /www/mediawiki/core/tests/parser/parserTest.inc:1331 PHP 9. WikiPage->doEditUpdates() /www/mediawiki/core/includes/WikiPage.php:1911 PHP 10. DataUpdate::runUpdates() /www/mediawiki/core/includes/WikiPage.php:2077 PHP 11. LinksUpdate->doUpdate() /www/mediawiki/core/includes/DataUpdate.php:102 PHP 12. wfRunHooks() /www/mediawiki/core/includes/LinksUpdate.php:123 PHP 13. Hooks::run() /www/mediawiki/core/includes/GlobalFunctions.php:3882 PHP 14. call_user_func_array() /www/mediawiki/core/includes/Hooks.php:199 PHP 15. CirrusSearchUpdater::linksUpdateCompletedHook() /www/mediawiki/core/includes/Hooks.php:199 PHP 16. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:98 PHP 17. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 18. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 19. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 20. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 21. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 22. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 23. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 24. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 25. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 26. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 27. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 28. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 29. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 30. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 31. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 32. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 33. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 34. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 35. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 36. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 37. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 38. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 39. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 40. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 41. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 42. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 43. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 44. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 45. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 46. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 47. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 48. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 49. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 50. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 51. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 52. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 53. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 54. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 55. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 56. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 57. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 58. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 59. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 60. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 61. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 62. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 63. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 64. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 65. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 66. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 67. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 68. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 69. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 70. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 71. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 72. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 73. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 74. CirrusSearch->update() /www/mediawiki/core/includes/search/SearchUpdate.php:117 PHP 75. CirrusSearchUpdater::updateFromTitleAndText() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:51 PHP 76. CirrusSearchUpdater::updateFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:60 PHP 77. SearchUpdate->doUpdate() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchUpdater.php:89 PHP 78. CirrusSearch->getTextFromContent() /www/mediawiki/core/includes/search/SearchUpdate.php:111 PHP 79. CirrusSearchTextSanitizer::getSantizedTextFromTitle() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearch.body.php:72 PHP 80. Article->getParserOutput() /www/mediawiki/core/extensions/CirrusSearch/CirrusSearchTextSanitizer.php:38 PHP 81. WikiPage->getParserOutput() /www/mediawiki/core/includes/Article.php:1818 PHP 82. PoolCounterWork->execute() /www/mediawiki/core/includes/WikiPage.php:1126 PHP 83. PoolWorkArticleView->doWork() /www/mediawiki/core/includes/PoolCounter.php:222 PHP 84. WikitextContent->getParserOutput() /www/mediawiki/core/includes/WikiPage.php:3514 PHP 85. Parser->parse() /www/mediawiki/core/includes/content/WikitextContent.php:300 PHP 86. Parser->internalParse() /www/mediawiki/core/includes/parser/Parser.php:388 PHP 87. Parser->replaceInternalLinks() /www/mediawiki/core/includes/parser/Parser.php:1219 PHP 88. Parser->replaceInternalLinks2() /www/mediawiki/core/includes/parser/Parser.php:1814 PHP 89. wfIsBadImage() /www/mediawiki/core/includes/parser/Parser.php:2060 PHP 90. RepoGroup->checkRedirect() /www/mediawiki/core/includes/GlobalFunctions.php:3940 PHP 91. LocalRepo->checkRedirect() /www/mediawiki/core/includes/filerepo/RepoGroup.php:211 PHP 92. LocalRepo->getArticleID() /www/mediawiki/core/includes/filerepo/LocalRepo.php:178 PHP 93. DatabaseBase->selectField() /www/mediawiki/core/includes/filerepo/LocalRepo.php:221 PHP 94. DatabaseBase->select() /www/mediawiki/core/includes/db/Database.php:1161 PHP 95. DatabaseBase->selectSQLText() /www/mediawiki/core/includes/db/Database.php:1445 PHP 96. DatabaseBase->tableNamesWithUseIndexOrJOIN() /www/mediawiki/core/includes/db/Database.php:1486 PHP 97. DatabaseBase->tableNameWithAlias() /www/mediawiki/core/includes/db/Database.php:2266 PHP 98. DatabaseBase->tableName() /www/mediawiki/core/includes/db/Database.php:2163 PHP 99. DatabaseMysqlBase->isQuotedIdentifier() /www/mediawiki/core/includes/db/Database.php:2054
Chad, do you particularly want to work on this one of should I grab it? You'd be better suited for it because you know MediaWiki better but you are so busy.
Merged fix: https://gerrit.wikimedia.org/r/#/c/85009/
Verified on test2wiki.