Page MenuHomePhabricator

A thousand PHP warnings when viewing specific zhwikipedia diff: "PHP Warning: preg_match(): Unknown modifier 't'"
Open, Needs TriagePublicPRODUCTION ERROR

Description

Error
message
[{reqId}] {exception_url}   PHP Warning: preg_match(): Unknown modifier 't'
trace
from /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/CommentParser.php(827)
#0 [internal function]: MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/CommentParser.php(827): preg_match(string, string, null, int)
#2 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/CommentParser.php(920): MediaWiki\Extension\DiscussionTools\CommentParser->findTimestamp(null, array)
#3 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/CommentParser.php(99): MediaWiki\Extension\DiscussionTools\CommentParser->buildThreadItems()
#4 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/CommentFormatter.php(289): MediaWiki\Extension\DiscussionTools\CommentParser->parse(Wikimedia\Parsoid\DOM\Element, MediaWiki\Title\TitleValue)
#5 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/CommentFormatter.php(66): MediaWiki\Extension\DiscussionTools\CommentFormatter::addDiscussionToolsInternal(string, MediaWiki\Parser\ParserOutput, MediaWiki\Title\Title)
#6 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/Hooks/ParserHooks.php(70): MediaWiki\Extension\DiscussionTools\CommentFormatter::addDiscussionTools(string, MediaWiki\Parser\ParserOutput, MediaWiki\Title\Title)
#7 /srv/mediawiki/php-1.45.0-wmf.6/extensions/DiscussionTools/includes/Hooks/ParserHooks.php(115): MediaWiki\Extension\DiscussionTools\Hooks\ParserHooks->transformHtml(MediaWiki\Parser\ParserOutput, string, MediaWiki\Title\Title, bool)
#8 /srv/mediawiki/php-1.45.0-wmf.6/includes/HookContainer/HookContainer.php(155): MediaWiki\Extension\DiscussionTools\Hooks\ParserHooks->onParserAfterTidy(MediaWiki\Parser\Parser, string)
#9 /srv/mediawiki/php-1.45.0-wmf.6/includes/HookContainer/HookRunner.php(2994): MediaWiki\HookContainer\HookContainer->run(string, array)
#10 /srv/mediawiki/php-1.45.0-wmf.6/includes/parser/Parser.php(1762): MediaWiki\HookContainer\HookRunner->onParserAfterTidy(MediaWiki\Parser\Parser, string)
#11 /srv/mediawiki/php-1.45.0-wmf.6/includes/parser/Parser.php(708): MediaWiki\Parser\Parser->internalParseHalfParsed(string, bool, bool)
#12 /srv/mediawiki/php-1.45.0-wmf.6/includes/content/WikitextContentHandler.php(382): MediaWiki\Parser\Parser->parse(string, MediaWiki\Title\Title, MediaWiki\Parser\ParserOptions, bool, bool, int)
#13 /srv/mediawiki/php-1.45.0-wmf.6/includes/content/ContentHandler.php(1693): MediaWiki\Content\WikitextContentHandler->fillParserOutput(MediaWiki\Content\WikitextContent, MediaWiki\Content\Renderer\ContentParseParams, MediaWiki\Parser\ParserOutput)
#14 /srv/mediawiki/php-1.45.0-wmf.6/includes/content/Renderer/ContentRenderer.php(75): MediaWiki\Content\ContentHandler->getParserOutput(MediaWiki\Content\WikitextContent, MediaWiki\Content\Renderer\ContentParseParams)
#15 /srv/mediawiki/php-1.45.0-wmf.6/includes/Revision/RenderedRevision.php(261): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(MediaWiki\Content\WikitextContent, MediaWiki\Page\PageIdentityValue, MediaWiki\Revision\RevisionStoreRecord, MediaWiki\Parser\ParserOptions, array)
#16 /srv/mediawiki/php-1.45.0-wmf.6/includes/Revision/RenderedRevision.php(233): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(MediaWiki\Content\WikitextContent, array)
#17 /srv/mediawiki/php-1.45.0-wmf.6/includes/Revision/RevisionRenderer.php(236): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#18 /srv/mediawiki/php-1.45.0-wmf.6/includes/Revision/RevisionRenderer.php(169): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, MediaWiki\Parser\ParserOptions, array)
#19 /srv/mediawiki/php-1.45.0-wmf.6/includes/Revision/RenderedRevision.php(196): MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#20 /srv/mediawiki/php-1.45.0-wmf.6/includes/page/ParserOutputAccess.php(504): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput()
#21 /srv/mediawiki/php-1.45.0-wmf.6/includes/page/ParserOutputAccess.php(598): MediaWiki\Page\ParserOutputAccess->renderRevision(MediaWiki\Page\WikiPage, MediaWiki\Parser\ParserOptions, MediaWiki\Revision\RevisionStoreRecord, int)
#22 /srv/mediawiki/php-1.45.0-wmf.6/includes/poolcounter/PoolCounterWorkViaCallback.php(81): MediaWiki\Page\ParserOutputAccess->MediaWiki\Page\{closure}()
#23 /srv/mediawiki/php-1.45.0-wmf.6/includes/poolcounter/PoolCounterWork.php(173): MediaWiki\PoolCounter\PoolCounterWorkViaCallback->doWork()
#24 /srv/mediawiki/php-1.45.0-wmf.6/includes/page/ParserOutputAccess.php(408): MediaWiki\PoolCounter\PoolCounterWork->execute()
#25 /srv/mediawiki/php-1.45.0-wmf.6/includes/page/Article.php(835): MediaWiki\Page\ParserOutputAccess->getParserOutput(MediaWiki\Page\WikiPage, MediaWiki\Parser\ParserOptions, MediaWiki\Revision\RevisionStoreRecord, int)
#26 /srv/mediawiki/php-1.45.0-wmf.6/includes/page/Article.php(551): MediaWiki\Page\Article->generateContentOutput(MediaWiki\User\User, MediaWiki\Parser\ParserOptions, int, MediaWiki\Output\OutputPage, array)
#27 /srv/mediawiki/php-1.45.0-wmf.6/includes/actions/ViewAction.php(84): MediaWiki\Page\Article->view()
#28 /srv/mediawiki/php-1.45.0-wmf.6/includes/actions/ActionEntryPoint.php(728): MediaWiki\Actions\ViewAction->show()
#29 /srv/mediawiki/php-1.45.0-wmf.6/includes/actions/ActionEntryPoint.php(505): MediaWiki\Actions\ActionEntryPoint->performAction(MediaWiki\Page\Article, MediaWiki\Title\Title)
#30 /srv/mediawiki/php-1.45.0-wmf.6/includes/actions/ActionEntryPoint.php(143): MediaWiki\Actions\ActionEntryPoint->performRequest()
#31 /srv/mediawiki/php-1.45.0-wmf.6/includes/MediaWikiEntryPoint.php(198): MediaWiki\Actions\ActionEntryPoint->execute()
#32 /srv/mediawiki/php-1.45.0-wmf.6/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#33 /srv/mediawiki/w/index.php(3): require(string)
#34 {main}
Impact

Logstash spam caused by DiscussionTools.

Details

MediaWiki Version
1.45.0-wmf.6
Request URL
https://zh.wikipedia.org/w/index.php?oldid=31747030&title=Wikipedia%3A%E6%B2%99%E7%9B%92

Event Timeline

• Dreamy_Jazz changed Request URL from https://zh.wikipedia.org /w/index.php?oldid=31747030&title=Wikipedia%3A%E6%B2%99%E7%9B%92 to https://zh.wikipedia.org/w/index.php?oldid=31747030&title=Wikipedia%3A%E6%B2%99%E7%9B%92.

The CommentParser hasn't had any changes in a while. The code in question is trying to generate a regex from local timestamp rules, and it looks like the resulting string is an invalid regex.

It would be helpful if someone could do some live debugging and copy the regexp it's trying to match.

The bug could happen if getTimestampRegexp() was failing to quote something, and it seems like there are some things that are not quoted, but they should not contain regexp metacharacters (e.g. the digits). But then this error would be happening on every page view, not just on this single revision.

Aklapper renamed this task from A thousand PHP warnings when viewing specific zhwikipedia diff to A thousand PHP warnings when viewing specific zhwikipedia diff: "PHP Warning: preg_match(): Unknown modifier 't'".Nov 11 2025, 9:25 AM