Mailing List Archive

svn commit: r225172 - /spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
Author: dos
Date: Mon Jul 25 13:28:07 2005
New Revision: 225172

URL: http://svn.apache.org/viewcvs?rev=225172&view=rev
Log:
bug 4419: improve eval test argument parsing and implement --lint warnings for same

Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm?rev=225172&r1=225171&r2=225172&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm Mon Jul 25 13:28:07 2005
@@ -674,11 +674,25 @@
if (($type & 1) == 1) {
my @args;
if (my ($function, $args) = ($text =~ m/(.*?)\s*\((.*?)\)\s*$/)) {
- if ($args) {
- @args = ($args =~ m/['"](.*?)['"]\s*(?:,\s*|$)/g);
- }
+ if ($args) {
+ # bug 4419: Parse quoted strings, unquoted alphanumerics/floats and
+ # both unquoted IPv4 and IPv6 addresses. s// is used so that we can
+ # determine whether or not we successfully parsed ALL arguments.
+ while ($args =~ s/^\s*(?:['"](.*?)['"]|([\d\.:A-Za-z]+?))\s*(?:,\s*|$)//) {
+ if (defined $1) {
+ push @args, $1;
+ }
+ else {
+ push @args, $2;
+ }
+ }
+ }
unshift(@args, $function);
- if ($type == $Mail::SpamAssassin::Conf::TYPE_BODY_EVALS) {
+ if ($args) {
+ $conf->{errors}++;
+ warn("syntax error (unparsable argument: $args) for eval function: $name: $text");
+ }
+ elsif ($type == $Mail::SpamAssassin::Conf::TYPE_BODY_EVALS) {
$conf->{body_evals}->{$priority}->{$name} = \@args;
}
elsif ($type == $Mail::SpamAssassin::Conf::TYPE_HEAD_EVALS) {