diff options
author | Koosha KM <koosha.khajeh@gmail.com> | 2014-08-25 23:30:58 +0200 |
---|---|---|
committer | David Lawrence <dkl@mozilla.com> | 2014-08-25 23:30:58 +0200 |
commit | 0922b44649075532dea64bdc6469446a34f5219f (patch) | |
tree | 95c580d29a7c703a0b49c19540b5d56f1ad72caf | |
parent | dfcf30644da6562d0c711620c6bd420c0332c609 (diff) | |
download | bugzilla-0922b44649075532dea64bdc6469446a34f5219f.tar.gz bugzilla-0922b44649075532dea64bdc6469446a34f5219f.tar.xz |
Bug 1054642: quoteUrls() enters an infinite loop with a list of nonexistent bug ids to be linkified
r=glob,a=sgreen
-rw-r--r-- | Bugzilla/Template.pm | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index 96896b47e..7e3527857 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -263,28 +263,23 @@ sub quoteUrls { my $bugs_re = qr/\Q$bugs_word\E$s*\#?$s* \d+(?:$s*,$s*\#?$s*\d+)+/ix; - while ($text =~ m/($bugs_re)/g) { - my $offset = $-[0]; - my $length = $+[0] - $-[0]; - my $match = $1; + $text =~ s{($bugs_re)}{ + my $match = $1; $match =~ s/((?:#$s*)?(\d+))/$bug_link_func->($2, $1);/eg; - # Replace the old string with the linkified one. - substr($text, $offset, $length) = $match; - } + $match; + }eg; my $comments_word = template_var('terms')->{comments}; my $comments_re = qr/(?:comments|\Q$comments_word\E)$s*\#?$s* \d+(?:$s*,$s*\#?$s*\d+)+/ix; - while ($text =~ m/($comments_re)/g) { - my $offset = $-[0]; - my $length = $+[0] - $-[0]; - my $match = $1; + $text =~ s{($comments_re)}{ + my $match = $1; $match =~ s|((?:#$s*)?(\d+))|<a href="$current_bugurl#c$2">$1</a>|g; - substr($text, $offset, $length) = $match; - } + $match; + }eg; # Old duplicate markers. These don't use $bug_word because they are old # and were never customizable. |