[FYI] Probleme bei der Verwendung von %a[...] in sscanf und neueren glibc-Versionen

  • Hallo,


    ich bin am Wochenende ausgehend von [yavdr-ansible] pin und zaphistory auf eine unglückliche funktionale Änderung in der glibc (?) gestoßen, die neu kompilierten alten C(++) Code kaputt machen kann.


    Der fehler entsteht durch die Nutzung einer alte GNU Extension für den Format Specifier `%a[...]` bei den *scanf Methoden (http://manpages.ubuntu.com/man…/scanf.3.html#anmerkungen), der später durch das Posix-kompatible `%m[...]` (https://gcc.gnu.org/gcc-5/porting_to.html Abschnitt "Different meaning of the %a *scanf conversion specification") abgelöst wurde. Der VDR hat die Änderung zu %m[...] schon in Version 2.1.3 durchgezogen, aber leider wurde diese Änderung bei diversen Plugins nicht gemacht und dann klappt das Parsen von Strings nicht mehr, weil -D_GNU_SOURCE mit neuen glibc-Versionen nur noch bei bestimmten alten C und C++ Versionen respektiert wird.


    Dieser Commit sieht so aus, als ob er für diese Änderung verantwortlich ist, aber dummerweise ist die offizielle Dokumentation noch nicht mal beim Hinweis auf `%m[...]` angekommen, geschweige denn, dass sie erwähnt, unter welchen Bedingungen man `%a[...]` noch nutzen kann: https://www.gnu.org/software/l…html#Dynamic-String-Input


    Betroffen sind soweit ich das bei den Plugins mit mir bekannten Git-Repos sehen konnte, sind mindestens folgende Plugins:

    • pin
    • zaphistory
    • mcli
    • pvrinput
    • playlist
    • infosatepg
    • robotv
    • eepg


    Für die Pakete in den yaVDR-PPAs für focal habe ich (soweit die Plugins dort paketiert sind) Patches eingebaut, aber am besten wäre es das Upstream zu korrigieren (also %a[ im sscanf-Aufruf durch %m[ und %as durch %ms zu ersetzen).

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 () aus folgendem Grund: Buchstabendreher behoben

  • Kann man diese Patches eigentlich irgendwie auch ohne Ubuntu einsehen?


    Ich finde dieses PPA-Webinterface ja ziemlich gruselig. Ist nicht das erste Mal wo ich vor sowas stehe:

    https://launchpad.net/%7Eyavdr…rection=backwards&memo=75

    und auch nach gefühlt einer Stunde suchen nicht geschafft habe da rauszufinden wo es Quellen für die Pakete gibt...


    Grund der Frage: Ich nutze bei einem Bekannten libmcli (das Plugin werde ich nicht nochmal versuchen zu bauen) mit minisatip und habe da mal flott drübergegreppt und so wie mir das aussieht gibt es das "%a" nur im Bereich "dvbfuse" und "netcv2dvbip". Beide sind weder für libmcli noch für das Plugin relevant.

  • M-Reimer

    Oben auf "view package details" klicken und dann die debian.tar.xz herunterladen:

    https://launchpad.net/~yavdr/+…avdr2~focal.debian.tar.xz

  • Danke. So kommt man tatsächlich zum Ziel.


    War nur noch das falsche PPA. Im "richtigen" habe ich zwar keine libmcli gefunden (wird die für focal nicht gebaut?) aber das VDR-Plugin:

    https://launchpad.net/%7Eyavdr…shed&field.series_filter=


    Ist wohl so wie erwartet. Die entsprechenden Bereiche greifen gar nicht für zumindest libmcli weil die "parse.c" nicht gelinkt wird.


    "netcv2dvbip" ist ein eigenes Tool, wird separat gebaut und soll wohl auf ein Protokoll ähnlich "satip" konvertieren. Da sich das nie durchgesetzt hat ist hier aber minisatip zusammen mit der libmcli die bessere Wahl.

  • Als ich im Februar unter Ubuntu 19.10 für meinen Vater VHS-Aufnahmen digitalisieren wollte, war ich bei pvrinput auch über dieses Problem gestolpert.

    mini73 hat bereits einen Patch hierfür, der (zusammen mit einigen Aufräumarbeiten) aber noch noch ins git eingecheckt werden muss.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • War nur noch das falsche PPA. Im "richtigen" habe ich zwar keine libmcli gefunden (wird die für focal nicht gebaut?

    Die steckt in diesem PPA, das für die Build-Dependencies und sonstigen Pakete neben dem VDR genutzt wird: https://launchpad.net/~yavdr/+…field.series_filter=focal


    Aber danke für den Hinweis, das ich da auch nachsehen muss, ich habe gestern nur meine Clone der Git-Repos für die VDR-Plugins durchsucht.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Wie gesagt: Wahrscheinlich ist weder das VDR mcli Plugin noch libmcli überhaupt betroffen. Die betroffenen Aufrufe befinden sich in eigenständigen Programmen die wahrscheinlich in keinem der Pakete gebaut werden.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!