2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 07:16:03 +00:00

fhem.pl: add CheckRegexp function (Forum #112168)

git-svn-id: https://svn.fhem.de/fhem/trunk@22189 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2020-06-17 13:53:32 +00:00
parent 7335ff54d9
commit 37a6ffc566
2 changed files with 18 additions and 6 deletions

View File

@ -477,8 +477,8 @@ MQTT2_DEVICE_Attr($$)
my ($par1, $par2) = split(" ", $el, 2); my ($par1, $par2) = split(" ", $el, 2);
next if(!$par1); next if(!$par1);
return "$dev attr $attrName: more parameters needed" if(!$par2); return "$dev attr $attrName: more parameters needed" if(!$par2);
eval { "Hallo" =~ m/^$par1$/ }; my $errMsg = CheckRegexp($par1, "bridgeRegexp attribute for $dev");
return "$dev $attrName regexp error: $@" if($@); return $errMsg if($errMsg);
} }
if($init_done) { if($init_done) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -588,10 +588,9 @@ MQTT2_DEVICE_addReading($$)
my $cid = $defs{$name}{CID}; my $cid = $defs{$name}{CID};
foreach my $line (split("\n", $param)) { foreach my $line (split("\n", $param)) {
my ($re,$code) = split(" ", $line,2); my ($re,$code) = split(" ", $line,2);
return "Bad line >$line< for $name" if(!defined($re) || !defined($code)); return "Bad line >$line< for $name" if(!defined($code));
return "Bad regexp >$re< for $name: $@" if($re =~ m/^[*+]/); my $errMsg = CheckRegexp($re, "readingList attribute for $name");
eval { "Hallo" =~ m/^$re$/ }; return $errMsg if($errMsg);
return "Bad regexp >$re< for $name: $@" if($@);
if($cid && $re =~ m/^$cid:/) { if($cid && $re =~ m/^$cid:/) {
$modules{MQTT2_DEVICE}{defptr}{"re:$cid"}{$re}{"$name,$code"} = 1; $modules{MQTT2_DEVICE}{defptr}{"re:$cid"}{$re}{"$name,$code"} = 1;
} else { } else {

View File

@ -56,6 +56,7 @@ sub Authenticate($$);
sub CallFn(@); sub CallFn(@);
sub CallInstanceFn(@); sub CallInstanceFn(@);
sub CheckDuplicate($$@); sub CheckDuplicate($$@);
sub CheckRegexp($$);
sub Debug($); sub Debug($);
sub DoSet(@); sub DoSet(@);
sub Dispatch($$;$$); sub Dispatch($$;$$);
@ -6117,4 +6118,16 @@ execFhemTestFile()
InternalTimer(1, sub { require $fhemTestFile }, 0 ) if($fhemTestFile); InternalTimer(1, sub { require $fhemTestFile }, 0 ) if($fhemTestFile);
} }
# return undef if ok or error. Prameter: regexp, error context
sub
CheckRegexp($$)
{
my ($re,$context) = @_;
return "Empty regexp in $context" if(!defined($re));
return "Bad regexp >$re< in $context" if($re =~ m/^[*+]/);
eval { "Hallo" =~ m/^$re$/ };
return "Bad regexp >$re< in $context: $@" if($@);
return undef;
}
1; 1;