?
avatar ggppdk
ggppdk
5 Sep 2017

Steps to reproduce the issue

At file
/libraries/src/MVC/Controller/FormController.php
at the save() task , just before return true; add exit;

At file
/administrator/components/com_finder/helpers/indexer/indexer.php
at line 520, just before: foreach ($tokens as $token) add

echo "<pre>"; print_r($tokens); echo "</pre>";

  1. Enable smart search indexer [EDIT] Enable all (core) finder plugins too
  2. Also enable error_reporting to maximum to see not found variable notices being printed
  3. [EDIT] (i forgot this step) Save joomla article form

Expected result

No garbage added to search indexer, no PHP notices are printed during save task

Actual result

The above happens

System information (as much as possible)

3.8.0-rc1

Additional comments

[EDIT]
Add the suggested code here:
https://github.com/joomla/joomla-cms/blob/staging/libraries/src/MVC/Controller/FormController.php#L839

and here:
https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_finder/helpers/indexer/indexer.php#L519

avatar ggppdk ggppdk - open - 5 Sep 2017
avatar joomla-cms-bot joomla-cms-bot - change - 5 Sep 2017
Labels Added: ?
avatar joomla-cms-bot joomla-cms-bot - labeled - 5 Sep 2017
avatar ggppdk ggppdk - change - 5 Sep 2017
The description was changed
avatar ggppdk ggppdk - edited - 5 Sep 2017
avatar ggppdk ggppdk - change - 5 Sep 2017
The description was changed
avatar ggppdk ggppdk - edited - 5 Sep 2017
avatar ggppdk ggppdk - change - 5 Sep 2017
The description was changed
avatar ggppdk ggppdk - edited - 5 Sep 2017
avatar ggppdk ggppdk - change - 5 Sep 2017
The description was changed
avatar ggppdk ggppdk - edited - 5 Sep 2017
avatar franz-wohlkoenig franz-wohlkoenig - change - 5 Sep 2017
Category com_search
avatar ggppdk
ggppdk - comment - 5 Sep 2017

Code expects token data to be an array of objects
but some of the token data are passed as a single array

e.g. a fix could be

		$first = reset($tokens);
		if (!is_object($first))
		{
			$tokens = array((object)$tokens);
		}
avatar ggppdk ggppdk - change - 5 Sep 2017
Title
3.8.0-rc1, release blocker ? Garbage added to smart search index, PHP notices printed, saving via AJAX gets broken
3.8.0-rc1, release blocker ? Some tokens lost / garbage added to smart search index, PHP notices printed, saving via AJAX gets broken
avatar ggppdk ggppdk - edited - 5 Sep 2017
avatar ggppdk ggppdk - change - 5 Sep 2017
The description was changed
avatar ggppdk ggppdk - edited - 5 Sep 2017
avatar mbabker
mbabker - comment - 5 Sep 2017

Casting that like that is no good as it is expected the objects are FinderIndexerToken instances.

Also per the doc block the method may accept either a single FinderIndexerToken instance or an array of FinderIndexerToken instances. Since https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_finder/helpers/indexer/indexer.php#L515 is setting $tokens I don't see how you run into a notice producing issue to begin with.

Likewise, without actually giving the notice message that you're getting, all any of us reading this can do is read it and wonder what you're talking about specifically.

avatar ggppdk
ggppdk - comment - 5 Sep 2017

@mbabker

ok right , an example of saving article "Popular tags" (no 3rd party extensions installed)
(a small part of the data passed to indexer addTokensToDb())

The first array is in expected format : aka an array of FinderIndexerToken objects
and then the 2nd is not expected format

Array
(
    [0] => FinderIndexerToken Object
        (
            [term] => popular
            [stem] => popular
            [numeric] => 
            [common] => 
            [phrase] => 
            [length] => 7
            [weight] => 0.4667
            [language] => *
        )

    [1] => FinderIndexerToken Object
        (
            [term] => tags
            [stem] => tags
            [numeric] => 
            [common] => 
            [phrase] => 
            [length] => 4
            [weight] => 0.2667
            [language] => *
        )

    [2] => FinderIndexerToken Object
        (
            [term] => popular tags
            [stem] => popular tags
            [numeric] => 
            [common] => 
            [phrase] => 1
            [length] => 12
            [weight] => 1.4
            [language] => *
            [derived] => 1
        )

)

Array
(
    [term] => 72
    [stem] => 72
    [numeric] => 1
    [common] => 
    [phrase] => 
    [length] => 2
    [weight] => 0.2
    [language] => *
)


Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 526

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 527

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 528

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 529

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 530

Notice: Trying to get property of non-object in D:\xampp\htdocs\devel\joomla-cms2\administrator\components\com_finder\helpers\indexer\indexer.php on line 532
avatar ggppdk
ggppdk - comment - 5 Sep 2017

Please note the lines are shifted by 2 because i have added an empty line plus the line
echo "<pre>"; print_r($tokens); echo "</pre>";

avatar ggppdk
ggppdk - comment - 5 Sep 2017

It should be easy to test

  1. Edit the files as described above (so that you see the bad format data and the notices)
  2. Enable smart search indexer [EDIT] Check that all (core) finder plugins are enabled too
  3. Also enable error_reporting to maximum to see not found variable notices being printed
  4. Save joomla article form e.g. "Popular tags" article
avatar franz-wohlkoenig franz-wohlkoenig - change - 6 Sep 2017
Status New Discussion
avatar ggppdk ggppdk - change - 6 Sep 2017
The description was changed
avatar ggppdk ggppdk - edited - 6 Sep 2017
avatar ggppdk
ggppdk - comment - 6 Sep 2017

@mbabker

you said

Also per the doc block the method may accept either a single FinderIndexerToken instance or an array of FinderIndexerToken instances.

so i tried to find who is giving bad data
and no-one is passing bad data,

  • the method itselft has a bad type cast
$a =new FinderIndexerToken;
$a = (array) $a;  // WRONG CASTING !!! The object was made a plain array !!!!

correct is

$a =new FinderIndexerToken;
$a = is_array($a) ? $a : array($a);  // Force it to be an array of FinderIndexerToken objects
avatar ggppdk
ggppdk - comment - 6 Sep 2017

release blocker please for this issue or the PR i made ?

avatar joomla-cms-bot joomla-cms-bot - close - 7 Sep 2017
avatar franz-wohlkoenig franz-wohlkoenig - change - 7 Sep 2017
Status Discussion Closed
Closed_Date 0000-00-00 00:00:00 2017-09-07 05:17:59
Closed_By franz-wohlkoenig
avatar joomla-cms-bot
joomla-cms-bot - comment - 7 Sep 2017
avatar franz-wohlkoenig
franz-wohlkoenig - comment - 7 Sep 2017

closed as having Pull Request #17894


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/17880.

Add a Comment

Login with GitHub to post a comment