?

User tests: Successful: Unsuccessful:

avatar mbabker
mbabker
11 Mar 2015

In JLanguage::parse() exists a condition to enter a recursive loop involving an improperly formatted override INI file. In the application bootup, the first call to JLanguage::getInstance() is the call that builds the language object that is eventually stored to JFactory. Within JLanguage's constructor, we scan for an override INI file and attempt to load it. While in debug mode, if the file has any errors, we attempt to display a translated message (since this is not the en-GB.ini file), which calls JText::sprintf(), and from within that message we call JFactory::getLanguage(). Since the JLanguage object is not yet set, JFactory attempts to create it, and we have now entered our recursive loop.

I propose to just remove the call to JText::sprintf() and always throw a hardcoded English message always instead. As JLanguage is our language parser, I feel it is incorrect that it attempts to create translated error messages, especially in a section of code that is supposed to be scanning for errors, and demonstrated by this use case this can cause a site to error out.

Below is a sample stack trace I was provided by a user troubleshooting this issue which demonstrates the recursive loop being entered into.

Call Stack
#    Time    Memory    Function    Location
1    0.0019    145848    {main}( )    ..\index.php:0
2    0.1031    2110856    JApplicationCms->execute( )    ..\index.php:40
3    0.1031    2111064    JApplicationSite->doExecute( )    ..\cms.php:251
4    0.1031    2111344    JApplicationSite->initialiseApp( )    ..\site.php:209
5    0.1467    3369104    JApplicationCms->initialiseApp( )    ..\site.php:649
6    0.1468    3356472    JLanguage::getInstance( )    ..\cms.php:557
7    0.1468    3357712    JLanguage->__construct( )    ..\language.php:301
8    0.1504    3358992    JLanguage->parse( )    ..\language.php:200
9    0.1541    3408640    JText::sprintf( )    ..\language.php:896
10    0.1541    3408680    JFactory::getLanguage( )    ..\text.php:253
11    0.1542    3408720    JFactory::createLanguage( )    ..\factory.php:195
12    0.1542    3408720    JLanguage::getInstance( )    ..\factory.php:706
13    0.1542    3409752    JLanguage->__construct( )    ..\language.php:301
14    0.1582    3410512    JLanguage->parse( )    ..\language.php:200
15    0.1604    3423128    JText::sprintf( )    ..\language.php:896
16    0.1604    3423128    JFactory::getLanguage( )    ..\text.php:253
17    0.1604    3423128    JFactory::createLanguage( )    ..\factory.php:195
18    0.1605    3423128    JLanguage::getInstance( )    ..\factory.php:706
19    0.1605    3424160    JLanguage->__construct( )    ..\language.php:301
20    0.1644    3424920    JLanguage->parse( )    ..\language.php:200
21    0.1666    3437536    JText::sprintf( )    ..\language.php:896
22    0.1666    3437536    JFactory::getLanguage( )    ..\text.php:253
23    0.1666    3437536    JFactory::createLanguage( )    ..\factory.php:195
24    0.1666    3437536    JLanguage::getInstance( )    ..\factory.php:706
25    0.1666    3438568    JLanguage->__construct( )    ..\language.php:301
avatar mbabker mbabker - open - 11 Mar 2015
avatar wilsonge
wilsonge - comment - 11 Mar 2015

@test Well I don't get an infinite recursion loop anymore. So test successful

avatar zero-24 zero-24 - change - 11 Mar 2015
Status Pending Ready to Commit
avatar Hackwar
Hackwar - comment - 11 Mar 2015

@test yep, works for me, too.

avatar zero-24 zero-24 - alter_testresult - 12 Mar 2015 - wilsonge: Tested successfully
avatar zero-24 zero-24 - alter_testresult - 12 Mar 2015 - Hackwar: Tested successfully
avatar zero-24
zero-24 - comment - 12 Mar 2015

RTC based on testing. Thanks!


This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/6395.
avatar zero-24 zero-24 - change - 12 Mar 2015
Category Libraries
avatar brianteeman brianteeman - change - 12 Mar 2015
Labels Added: ?
avatar zero-24 zero-24 - close - 13 Mar 2015
avatar wilsonge wilsonge - change - 13 Mar 2015
Status Ready to Commit Closed
Closed_Date 0000-00-00 00:00:00 2015-03-13 00:09:55
avatar wilsonge wilsonge - close - 13 Mar 2015
avatar wilsonge wilsonge - reference | - 13 Mar 15
avatar wilsonge wilsonge - merge - 13 Mar 2015
avatar wilsonge wilsonge - close - 13 Mar 2015
avatar zero-24 zero-24 - change - 14 Oct 2015
Labels Removed: ?

Add a Comment

Login with GitHub to post a comment