Merge branch 'MDL-30741_m22' of git://github.com/jfilip/moodle into MOODLE_22_STABLE

This commit is contained in:
Eloy Lafuente (stronk7) 2011-12-20 00:05:13 +01:00
commit 58ca2c4b71
2 changed files with 41 additions and 3 deletions

View file

@ -543,9 +543,15 @@ class html2text
*/
function _convert_pre(&$text)
{
while(preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) {
$result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]);
$text = preg_replace('/<pre[^>]*>.*<\/pre>/ismU', '<div><br>' . $result . '<br></div>', $text, 1);
while (preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) {
// convert the content
$this->pre_content = sprintf('<div><br>%s<br></div>',
preg_replace($this->pre_search, $this->pre_replace, $matches[1]));
// replace the content (use callback because content can contain $0 variable)
$text = preg_replace_callback('/<pre[^>]*>.*<\/pre>/ismU',
array('html2text', '_preg_pre_callback'), $text, 1);
// free memory
$this->pre_content = '';
}
}
@ -573,6 +579,17 @@ class html2text
}
}
/**
* Callback function for preg_replace_callback use in PRE content handler.
*
* @param array PREG matches
* @return string
*/
private function _preg_pre_callback($matches)
{
return $this->pre_content;
}
/**
* Strtoupper multibyte wrapper function
*

View file

@ -139,6 +139,27 @@ class web_test extends UnitTestCase {
$this->assertIdentical('0', html_to_text('0'));
}
public function test_html_to_text_pre_parsing_problem() {
$strorig = 'Consider the following function:<br /><pre><span style="color: rgb(153, 51, 102);">void FillMeUp(char* in_string) {'.
'<br /> int i = 0;<br /> while (in_string[i] != \'\0\') {<br /> in_string[i] = \'X\';<br /> i++;<br /> }<br />'.
'}</span></pre>What would happen if a non-terminated string were input to this function?<br /><br />';
$strconv = 'Consider the following function:
void FillMeUp(char* in_string) {
int i = 0;
while (in_string[i] != \'\0\') {
in_string[i] = \'X\';
i++;
}
}
What would happen if a non-terminated string were input to this function?
';
$this->assertIdentical($strconv, html_to_text($strorig));
}
public function test_clean_text() {
$text = "lala <applet>xx</applet>";
$this->assertEqual($text, clean_text($text, FORMAT_PLAIN));