Non-greedy matching for votestrings.

A single choice on a ballot has this format:

 #1   [            ]  This or that

The regexp in uvvote.pl's process_vote() will
match and extract what's beetwen "[" and "]".
But if "This or that" contains a "]", the
match will be too greedy:

 #1   [            ]  This [or that]
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <- match

Fix that by using a non-greedy operator.

Signed-off-by: Thomas Hochstein <thh@thh.name>
This commit is contained in:
Thomas Hochstein 2022-03-29 22:56:47 +02:00
parent f90cfdb57f
commit a7ea02d592

View file

@ -271,7 +271,7 @@ sub process_vote {
} }
# this matches on a single appearance: # this matches on a single appearance:
if ($$body =~ /#$votenum\W*?\[(.+)\]/) { if ($$body =~ /#$votenum\W*?\[(.+?)\]/) {
# one or more vote strings were found # one or more vote strings were found
$onevote ||= 1; # set $onevote to 1 if it was 0 $onevote ||= 1; # set $onevote to 1 if it was 0
my $votestring = $1; my $votestring = $1;