From 7a328160c4b05726057c4747591af39b5f1b8dd6 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sun, 27 Mar 2022 10:39:22 +0000 Subject: [PATCH] 10_MQTT2_DEVICE.pm: CheckRegexp with devicetopic for readingList (Forum #126969) git-svn-id: https://svn.fhem.de/fhem/trunk@25889 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_MQTT2_DEVICE.pm | 7 ++----- fhem/fhem.pl | 7 +++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/10_MQTT2_DEVICE.pm b/fhem/FHEM/10_MQTT2_DEVICE.pm index 6d8730936..9cf46d642 100644 --- a/fhem/FHEM/10_MQTT2_DEVICE.pm +++ b/fhem/FHEM/10_MQTT2_DEVICE.pm @@ -474,10 +474,6 @@ MQTT2_DEVICE_Attr($$) return "$dev attr $attrName: more parameters needed" if(!$par2); if($atype eq "reading") { - $par1 =~ s/\$[a-z0-9_]+/\.\*/gi; - eval { "Hallo" =~ m/^$par1$/ }; - return "Bad regexp in $dev readingList: $@" if($@); - if($par2 =~ m/^{.*}\s*$/) { my %v = ("%TOPIC"=>1, "%EVENT"=>"0 1 2 3 4 5 6 7 8 9", "%NAME"=>$dev, "%CID"=>"clientId", "%JSONMAP"=>""); @@ -625,10 +621,11 @@ MQTT2_DEVICE_addReading($$) next if($line eq ""); my ($re,$code) = split(" ", $line,2); return "ERROR: empty code in line >$line< for $name" if(!defined($code)); + + map { $re =~ s/\$$_/$hash->{".DT"}{$_}/g } keys %{$hash->{".DT"}}; my $errMsg = CheckRegexp($re, "readingList attribute for $name"); return $errMsg if($errMsg); - map { $re =~ s/\$$_/$hash->{".DT"}{$_}/g } keys %{$hash->{".DT"}}; if($cid && $re =~ m/^$cid:/) { if($re =~ m/^$cid:([^\\\?.*\[\](|)]+):\.\*$/) { # cid:topic:.* $modules{MQTT2_DEVICE}{defptr}{"re:$cid:$1"}{$re}{"$name,$code"} = 1; diff --git a/fhem/fhem.pl b/fhem/fhem.pl index dd2b2c8ef..b85dedfa2 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -6396,8 +6396,15 @@ CheckRegexp($$) my ($re,$context) = @_; return "Empty regexp in $context" if(!defined($re)); return "Bad regexp >$re< in $context" if($re =~ m/^[*+]/); + + my $warn; + my $osig = $SIG{__WARN__}; + $SIG{__WARN__} = sub { $warn = @_[0]}; eval { "Hallo" =~ m/^$re$/ }; + $SIG{__WARN__} = $osig; + return "Bad regexp >$re< in $context: $@" if($@); + return "Bad regexp >$re< in $context: $warn" if($warn); return undef; }