RaspberryMatic icon indicating copy to clipboard operation
RaspberryMatic copied to clipboard

ReGaHSS: .DayProfileEntry() -> Absturz der ReGaHSS

Open BadenPower opened this issue 4 months ago • 0 comments

Describe the issue you are experiencing

Wird die Methode .DayProfileEntry() mit einem Indexwert grüßer als 23 oder kleiner als 0 im 1. Parameter AIndex aufgerufen, dann kommt es zu unvorhersehbaren Aktionen.

Wird zum Beispiel ein Indexwert von 21738156 angegeben, dann stürzt der ReGaHSS-Prozess ab.

Ein Indexwert von 49 greift auf den Werteeintag der Methode .DayTypeProgId() zu.

Ein Indexwert von 51 hingegen greift auf den Werteeintag der Methode .PrgInfo() zu, wobei bei schreibendem Zugriff die ReGaDom-Struktur beschädigt werden kann, so dass ein korrektes Parsen der Datei nicht mehr möglich ist. Hierbei wird der eingegebene Integerwert in einen String und umgekehrt konvertiert.

Es wird kein Fehler in das Fehlerprotokoll eingetragen.

Describe the behavior you expected

Wird die Methode .DayProfileEntry() im 1. Parameter mit einem Indexwert ausserhalb des gültigen Wertebereichs von 0 bis 23 aufgerufen, dann sollte eine entsprechende Fehlermeldung ins Fehlerprotokoll eingetragen werden. Ausserdem dürfte kein Zugriff auf andere/fremde Speicherbereiche stattfinden, um zu gewähleisten, dass unabhängige Objekt-Parameter nicht mit fehlerhaften Werten überschrieben werden.

Steps to reproduce the issue

Ausführung der folgenden Skripte unter "Skript testen":

Skript 1 -> ReGaHSS-Absturz

WriteLine("Start");
WriteLine(dom.BuildLabel());
var lResult;
object lObjPrg = (dom.GetObject(ID_PROGRAMS)).GetAt(0);
if(lObjPrg)
{
  lResult = lObjPrg.DayProfileEntry(21738156);
}
WriteLine("Ende");

Skript 2 -> Zugriff auf den Speicherbereich von .DayTypeProgId();

WriteLine("Start");
WriteLine(dom.BuildLabel());
var lResult;
var lSaveValue;
object lObjPrg = (dom.GetObject(ID_PROGRAMS)).GetAt(0);
if(lObjPrg)
{
  WriteLine("------------------");
  WriteLine("------------------");
  lResult = lObjPrg.DayTypeProgId();
  lSaveValue = lResult;
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(49);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(49,12345);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(49);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  lResult = lObjPrg.DayTypeProgId();
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  WriteLine("------------------");
  lResult = lObjPrg.DayTypeProgId(23456);
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(49);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  lResult = lObjPrg.DayTypeProgId();
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  WriteLine("------------------");
  lObjPrg.DayTypeProgId(lSaveValue);
}
WriteLine("Ende");

Skript 3 -> Zugriff auf den Speicherbereich von .PrgInfo();

WriteLine("Start");
WriteLine(dom.BuildLabel());
var lResult;
var lSaveValue;
object lObjPrg = (dom.GetObject(ID_PROGRAMS)).GetAt(0);
if(lObjPrg)
{
  WriteLine("------------------");
  WriteLine("------------------");
  lResult = lObjPrg.PrgInfo();
  lSaveValue = lResult;
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(51);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(51,1819042120);  !Ha+llo
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(51);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  lResult = lObjPrg.PrgInfo();
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  WriteLine("------------------");
  lResult = lObjPrg.PrgInfo("Text");
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  lResult = lObjPrg.DayProfileEntry(51);
  WriteLine(lResult);
  WriteLine(lResult.Type());
  WriteLine("------------------");
  lResult = lObjPrg.PrgInfo();
  WriteLine(lResult);
  WriteLine(lResult.Type())
  WriteLine("------------------");
  WriteLine("------------------");
  lObjPrg.PrgInfo(lSaveValue);
}
WriteLine("Ende");

Skript 4 -> allgemeines Testskript

WriteLine("Start");
WriteLine(dom.BuildLabel());
integer lStart = 0;
integer lLoops = 1000;
integer lCount = 0;
var lResult;
object lObjPrg = (dom.GetObject(ID_PROGRAMS)).GetAt(0);
if(lObjPrg)
{
  while(lCount < lStart + lLoops)
  {
    lResult = lObjPrg.DayProfileEntry(lCount);
    WriteLine(lCount);
    WriteLine(lResult);
    WriteLine(lResult.Type());
    WriteLine("----------");
    lCount = lCount + 1;
  }
}
WriteLine("Ende");

What is the version this bug report is based on?

CCU3 mit ReGaHSS-Version R1.00.0388.0235

Which base platform are you running?

rpi3 (RaspberryPi3, ARM64/aarch64)

Which HomeMatic/homematicIP radio module are you using?

n/a

Anything in the logs that might be useful for us?

bestehend seit:
unbekannt (bereits mit ReGaHss-Version R1.00.0388.0102)

Additional information

Ausgabe des Skriptes 2:

Start
R1.00.0388.0235
------------------
------------------
65535
integer
------------------
65535
integer
------------------
------------------
true
boolean
------------------
12345
integer
------------------
12345
integer
------------------
------------------
true
boolean
------------------
23456
integer
------------------
23456
integer
------------------
------------------
Ende

Ausgabe des Skriptes 3:

Start
R1.00.0388.0235
------------------
------------------

string
------------------
1819042048
integer
------------------
------------------
true
boolean
------------------
1819042120
integer
------------------
Hallo
string
------------------
------------------
true
boolean
------------------
1954047316
integer
------------------
Text
string
------------------
------------------
Ende

BadenPower avatar Aug 26 '25 18:08 BadenPower