[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 - 1.1.2

  • Und noch etwas ...


    Ich habe oft 2 Bilder zu der Aufnahme, eines im Portrait Format (Bild auf DVD), ein anderes im Landscape Format.

    Das Bild im Landscape Format wird korrekt angezeigt. Das Bild im Portrait Format wird auf der linken Hälfte des Platzes angezeigt, auf der rechten Hälfte des Platzes bleibt das halbe Bild im Landscape Format stehen.


    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Was kommt raus, wenn "s" gleich lang ist wie "buffer" ?

    strncpy kopiert ganz "s" und das "\0" aus der nächsten Code Zeile überschreibt das letzte Zeichen von "s".

    Besser wäre:

    strncpy(buffer, s, min(sizeof(buffer) - 1, strlen(s)));

    buffer[strlen(s)) - 1] = '\0';

    damit auf jeden Fall Platz für das "\0" bleibt.

    Oder verstehe ich da was falsch ???

  • Da irrt die "KI" Deines Compilers (oder Du?): direkt danach wird ein Nullbyte geschrieben um solche Probleme zu verhindern:

    Code
    674                  isNewRecording = true;
    675                  strncpy(buffer, s, min(sizeof(buffer), strlen(s)));
    676                  buffer[min(sizeof(buffer), strlen(s)) - 1] = '\0';

    Ich habe nur die Warnungen des compilers gepostet. Und wenn ich mir den Code anschaue, wird die 0 explizit geschrieben, damit ist das dann auch ein gültiger c-string.

    Jetzt, wo ich mir den Code anschaue: falls strlen(s) == 0 ist gibt es Probleme. Ev. kann man das in Zeile 645 mit prüfen:

    if (s && *s){ // symbol and progress bar detection

    Ob das (mögliche) Kürzen des c-strings in buffer zu funktionalen Fehlern führt, kann ich nicht beurteilen.


    Und dann wäre da noch config.c, Zeilen 55 und 64:

    Code
          strncpy(logoBaseDir, dir, sizeof(logoBaseDir));                                                                                          
          DSYSLOG("skinElchiHD: setting logoBaseDir to '%s'", logoBaseDir)
    ...
    
          strncpy(epgimageDir, dir, sizeof(epgimageDir));                                                                                          
          DSYSLOG("skinelchiHD: setting epgimageDir to '%s'", epgimageDir)


    Das sieht nicht gut aus. Hier sollte man eine Fehlermeldung ins syslog schreiben, wenn logoBaseDir / epgimageDir nicht groß genug für die vom Anwender übergebenen Strings sind. Und natürlich vor den Aufruf von DSYSLOG(...) die fehlende 0 schreiben ...


    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Jetzt, wo ich mir den Code anschaue: falls strlen(s) == 0 ist gibt es Probleme. Ev. kann man das in Zeile 645 mit prüfen:

    if (s && *s){ // symbol and progress bar detection

    Da GetTabbedText() IMHO aber nie einen leeren String zurück liefern kann, ist das nicht nötig.


    Hier sollte man eine Fehlermeldung ins syslog schreiben, wenn logoBaseDir / epgimageDir nicht groß genug für die vom Anwender übergebenen Strings sind. Und natürlich vor den Aufruf von DSYSLOG(...) die fehlende 0 schreiben ...

    Das scheint noch ganz alter Code von skinElchi zu sein, MaxFileName wird von VDR als deprecated bezeichnet. Wenn man das anfasst sollte man gleich einen dynamischen cString daraus machen....

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!