Fehlerhafter Regex zieht FHEM in den Abgrund

Begonnen von Christoph Morrison, 11 Mai 2020, 02:44:41

Vorheriges Thema - Nächstes Thema

Christoph Morrison

Es ist spät/früh und man sollte aufpassen was man tut:

DOELSEIF
(
            [out.seat_covers.dummy:state] eq q{on}
        and ["out.irigation.valves.channel.(?:[01])"":state] eq "on"
)
(
    msg Die Bewässerung auf der Südseite ist aktiviert und die Bezüge sind draußen!
)


Das ist ein Ausschnitt aus einem fehlerhaften DOIF, da sind zwei " hintereinander, wo nur eins sein sollte (Danke, IDE).
Das führte zu folgendem Log und FHEM starb.


2020.05.11 02:39:25.056 1: ERROR evaluating my $TYPE='Global';my $EVTPART1='out.seat_covers.alert';my $EVENT='MODIFIED out.seat_covers.alert';my $EVTPART0='MODIFIED';my $NAME='global';my $SELF='general.system.changelog.system';{fhem("trigger $SELF change: ".lc("$EVENT"))}: Unmatched ( in regex; marked by <-- HERE in m/^global$|^general.weather.station.sensor_5.rainfall$|out.irigation.valves.channel.( <-- HERE ?|^out.seat_covers.dummy$|^general.weather.forecast.buienradar$/ at ./FHEM/98_DOIF.pm line 2529.

2020.05.11 02:39:25.056 3: general.system.changelog.system return value: Unmatched ( in regex; marked by <-- HERE in m/^global$|^general.weather.station.sensor_5.rainfall$|out.irigation.valves.channel.( <-- HERE ?|^out.seat_covers.dummy$|^general.weather.forecast.buienradar$/ at ./FHEM/98_DOIF.pm line 2529.

Unmatched ( in regex; marked by <-- HERE in m/^global$|^general.weather.station.sensor_5.rainfall$|out.irigation.valves.channel.( <-- HERE ?|^out.seat_covers.dummy$|^general.weather.forecast.buienradar$/ at ./FHEM/98_DOIF.pm line 2529.


Eher unschön, dass FHEM dann stirbt. Habt ihr eine Idee, wie man sowas abfangen könnte?

rudolfkoenig

notify (und 10 weitere Module) prueft bei der Definition per perlSyntaxCheck(), ob der Ausdruck Syntaxfehler enthaelt.

Die Funktion besteht im Wesentlichen aus eval { return; <perlcode> }, weiss nicht, ob was Vergleichbares bei DOIF gemacht wird bzw. machbar waere.