-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Correct tag matching in truncate #6394
Conversation
String truncate doesn't correctly match closing html tags that contain numbers. This change corrects this. Fixes joomla#6149
Would you be able to extend the existing unittest testcases regarding this with an example? |
Tested without applying the patch. Hm, could not see any truncation. Second was not produced. This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/6394. |
edit ... Second < / h 1 > was not produced. This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/6394. |
I can not reproduce the bug, therefore I can not test the patch :-( TitleEnough text to get truncated as the normal TinyMCE will change the code that it is not testable for this bug. Maybe I misunderstand the bug, so maybe that is just because English is not my native language. In that case I am sorry. |
can't reproduce it with TinyMCE. Added code with Editor and as 2. try i switched to raw code |
@FrankyDE @gorgonz <?php echo JHtmlString::truncate("<h1>Header</h1> Lorem ipsum dolor sit amet blind text", 20); ?> @test: This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/6394. |
@test Success What means "unit tests"? |
@test: bug confirmed, patch tested succesfully. |
@bertmert Unit tests are PHP programs that test other PHP functions to make sure that they produce the desired result. So for this one, we could need a test that makes sure that the truncate method returns correct results for a few different inputs. |
works! after patch install undo patch This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/6394. |
Correct tag matching in truncate
String truncate doesn't correctly match closing html tags that contain numbers.
This change corrects this.
Fixes #6149
Truncated text from articles containing an html element with numerals (currently only "h"(eader) exists) and another html element whose closing tag is removed in the truncation, will produce invalid html.
This is because the regex in string.truncate fails to match closing tags with numerals.
Steps to reproduce the issue
Put text like
<h1>Title</h1><p>Enough text to get truncated</p>
at the beginning of an article that is then displayed with string.truncate.Expected result
The html
<h1>Title</h1><p>Partial text</p>...
is producedActual result
The html
<h1>Title</h1><p>Partial text</p></h1>...
is produced.This is invalid in that it produces a second, unmatched, closing h1 tag.
System information (as much as possible)
The incorrect code is in line 100 in /libraries/cms/html/string.php.
The match string is
#</([a-z]+)>#iU
when it should be#</([a-z][a-z0-9]*)>#iU
to match closing tags with numerals.
This renders correct html in the above example.
If we wanted to cover the case where a closing tag like
</h1 >
was being matched, the pattern should be#</([a-z][a-z0-9]*)\b(?:[^>]*?)>#iU
Additional comments
This error, of course, afflicts truncateComplex too, since it calls truncate.
This code is called anywhere where a short extract from html is displayed, six different views in core components (content, tags, finder, newsfeed).