[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/manpages/focal…tml#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/libc/…ic-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).

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Edited once, last by seahawk1986: Buchstabendreher behoben (January 26, 2021 at 10:54 AM).

  • 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/+arch…ckwards&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.

  • Bei pvrinput haben Dr. Seltsam und ich uns schon den Wolf gesucht. Das %m war mir nicht bekannt. Danke für's Finden!

    vdr2: yaVDR 0.5/softhddevice @ G540, Intel DH67BLB3, Asus GT610/2GB, DDBridge + 2x DuoFlex C/T
    hdvdr: yaVDR unstable/softhddevice @ E8400, Asus P5Q SE Plus, 1x L4M-TwinCI + Flex C/T, 1x Sundtek MediaTV Pro, GT520
    Plugins: | avahi4vdr | dbus2vdr | dynamite | epg2timer | noepg | pvrinput | sundtek |

  • M-Reimer

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

    https://launchpad.net/~yavdr/+archiv…l.debian.tar.xz

    vdr2: yaVDR 0.5/softhddevice @ G540, Intel DH67BLB3, Asus GT610/2GB, DDBridge + 2x DuoFlex C/T
    hdvdr: yaVDR unstable/softhddevice @ E8400, Asus P5Q SE Plus, 1x L4M-TwinCI + Flex C/T, 1x Sundtek MediaTV Pro, GT520
    Plugins: | avahi4vdr | dbus2vdr | dynamite | epg2timer | noepg | pvrinput | sundtek |

  • 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/+arch….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: Odroid N2+ mit CoreELEC und Ubuntu in chroot, 2x WinTV DualHD, Sandisk 2TB SSD

    VDR2: Tanix TX3 mit VDR*ELEC, WinTV DualHD, 500GB SSD

  • 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/+archiv…es_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.

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    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.

Participate now!

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