- found a small bug in the list parser while working on another bug

git-svn-id: file:///svn/phpbb/trunk@6898 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
David M 2007-01-18 05:09:35 +00:00
parent de07a9e0ad
commit a64caea9b6

View file

@ -513,8 +513,8 @@ class bbcode_firstpass extends bbcode
// if $tok is ']' the buffer holds a tag
if (strtolower($buffer) == '/list' && sizeof($list_end_tags))
{
// valid [/list] tag
if (sizeof($item_end_tags))
// valid [/list] tag, check nesting so that we don't hit false positives
if (sizeof($item_end_tags) && sizeof($item_end_tags) >= sizeof($list_end_tags))
{
// current li tag has not been closed
$out = preg_replace('/\n?\[$/', '[', $out) . array_pop($item_end_tags) . '][';
@ -567,11 +567,8 @@ class bbcode_firstpass extends bbcode
$item_end_tags[] = '/*:m:' . $this->bbcode_uid;
}
else if ($buffer == '/*')
{
if (array_pop($item_end_tags) == '/*:m:' . $this->bbcode_uid)
{
array_pop($item_end_tags);
}
$buffer = '/*:' . $this->bbcode_uid;
}
@ -1182,18 +1179,28 @@ class parse_message extends bbcode_firstpass
{
if ($max_smilies)
{
$num_matches = preg_match_all('#' . str_replace('#', '', implode('|', $match)) . '#', $this->message, $matches);
unset($matches);
if ($num_matches !== false && $num_matches > $max_smilies)
$count = 0;
foreach ($match as $key => $smilie)
{
if ($small_count = preg_match_all($smilie, $this->message, $array))
{
$count += $small_count;
if ($count > $max_smilies)
{
$this->warn_msg[] = sprintf($user->lang['TOO_MANY_SMILIES'], $max_smilies);
return;
}
}
$this->message = preg_replace($smilie, $replace[$key], $this->message);
}
$this->message = trim($this->message);
}
else
{
$this->message = trim(preg_replace($match, $replace, $this->message));
}
}
}
/**
* Parse Attachments