Page MenuHomePhabricator

PHP Warning: strtr(): The second argument is not an array in includes/utils/StringUtils.php
Closed, ResolvedPublic

Description

For some reason language converter is breaking stuff on some pages and flooding our logs considerably. Cannot debug properly since this only happens in production.

Cause is likely between 9ef2bf0 and b32d16d in core, or it might be in extensions as well.

#0 /www/translatewiki.net/w/languages/LanguageConverter.php(468): ReplacementArray->replace('?Saqlangan sahi...')
#1 /www/translatewiki.net/w/languages/LanguageConverter.php(436): LanguageConverter->translate('?Saqlangan sahi...', 'uz')
#2 /www/translatewiki.net/w/languages/LanguageConverter.php(654): LanguageConverter->autoConvert('<p>Saqlangan sa...', 'uz')
#3 /www/translatewiki.net/w/languages/LanguageConverter.php(630): LanguageConverter->recursiveConvertTopLevel('<p>Saqlangan sa...', 'uz')
#4 /www/translatewiki.net/w/languages/LanguageConverter.php(613): LanguageConverter->convertTo('<p>Saqlangan sa...', 'uz')
#5 /www/translatewiki.net/w/languages/Language.php(3767): LanguageConverter->convert('<p>Saqlangan sa...')
#6 /www/translatewiki.net/w/includes/parser/Parser.php(429): Language->convert('<p>Saqlangan sa...')
#7 [internal function]: Parser->parse('Saqlangan sahif...', Object(Title), Object(ParserOptions), true, true, 4373942)
#8 /www/translatewiki.net/w/includes/StubObject.php(99): call_user_func_array(Array, Array)
#9 /www/translatewiki.net/w/includes/StubObject.php(119): StubObject->_call('parse', Array)
#10 /www/translatewiki.net/w/includes/content/WikitextContent.php(300): StubObject->__call('parse', Array)
#11 /www/translatewiki.net/w/includes/content/WikitextContent.php(300): StubObject->parse('Saqlangan sahif...', Object(Title), Object(ParserOptions), true, true, 4373942)
#12 /www/translatewiki.net/w/includes/WikiPage.php(3543): WikitextContent->getParserOutput(Object(Title), 4373942, Object(ParserOptions))
#13 /www/translatewiki.net/w/includes/PoolCounter.php(222): PoolWorkArticleView->doWork()
#14 /www/translatewiki.net/w/includes/Article.php(708): PoolCounterWork->execute()
#15 /www/translatewiki.net/w/includes/actions/ViewAction.php(44): Article->view()
#16 /www/translatewiki.net/w/includes/Wiki.php(441): ViewAction->show()
#17 /www/translatewiki.net/w/includes/Wiki.php(305): MediaWiki->performAction(Object(Article), Object(Title))
#18 /www/translatewiki.net/w/includes/Wiki.php(596): MediaWiki->performRequest()
#19 /www/translatewiki.net/w/includes/Wiki.php(460): MediaWiki->main()
#20 /www/translatewiki.net/w/index.php(49): MediaWiki->run()
#21 {main}
[11-Nov-2013 18:19:34 UTC] PHP Warning: strtr(): The second argument is not an array in /www/translatewiki.net/w/includes/utils/StringUtils.php on line 509


Version: unspecified
Severity: major
URL: https://translatewiki.net//wiki/Wikimedia:Wikisourcemobile-menu-savedPages/uz

Details

Reference
bz56911

Event Timeline

bzimport raised the priority of this task from to High.Nov 22 2014, 2:29 AM
bzimport set Reference to bz56911.

$wgDisableLangConversion = true; doesn't help. It does hide the language conversion tabs though (which I haven't seen before).

On my development wiki:
object(ReplacementArray)#428 (2) {

["data":"ReplacementArray":private]=>
array(0) {
}
["fss":"ReplacementArray":private]=>
bool(false)

}

On production:
object(ReplacementArray)#330 (3) {

["data":"ReplacementArray":private]=>
bool(false)
["fss":"ReplacementArray":private]=>
bool(false)
["data"]=>
array(0) {
}

}

When dumping the conversion table in LanguageConverter.php(468). No idea how can there be two keys with "data".

Change 94789 had a related patch set uploaded by Nikerabbit:
Increase LanguageConverter cache version

https://gerrit.wikimedia.org/r/94789

Change 94789 merged by jenkins-bot:
Increase LanguageConverter cache version

https://gerrit.wikimedia.org/r/94789

Issue was only the wrong version inside the cache and now fixed by invalide the cache?

(In reply to comment #5)

Issue was only the wrong version inside the cache and now fixed by invalide
the
cache?

Yes. The PHP interpreter, and thus the PHP serialize() format, encodes a property's visibility as a property name prefix:

  • "" (no prefix) for public properties
  • "\0*\0" for protected properties
  • "\0$class\0" for private properties

Consequently, when an old ReplacementArray is unserialized, the property's (un)prefixed name does not match, and thus its value is not properly set. Bumping the cache version prevents this from happening.