Skip to content

fix(external_thumbnail): Service-Erkennung auf unterstützte Dienste beschränken - #498

Merged
skerbis merged 1 commit into
FriendsOfREDAXO:mainfrom
isospin:fix/external-thumbnail-service-detection
Aug 13, 2026
Merged

fix(external_thumbnail): Service-Erkennung auf unterstützte Dienste beschränken#498
skerbis merged 1 commit into
FriendsOfREDAXO:mainfrom
isospin:fix/external-thumbnail-service-detection

Conversation

@isospin

@isospin isospin commented Aug 13, 2026

Copy link
Copy Markdown
Member

Problem

lib/effect_external_thumbnail.php:37 ermittelt den Video-Service aus dem Dateinamen, trifft dabei aber jede .jpg-Datei mit mindestens zwei Unterstrichen im Namen – nicht nur die virtuellen Namen im Schema service_videoid_hash.jpg. Der erste Namensteil wird als Service interpretiert, Zeile 52 wirft dann rex_exception: External thumbnail effect: Unsupported service "...".

Relevant wird das im Zusammenspiel mit cache_warmup: install.php:182-216 legt den Medientyp consent_manager_thumbnail mit diesem Effect an, und cache_warmup rendert jedes Bild durch jeden Typ aus rex_media_manager_type. Pro betroffenem Bild entsteht dadurch ein Log-Eintrag und über den catch (Zeile 111-115) ein graues 480×360-Platzhalterbild, das der Media Manager anschließend als reguläre Cache-Datei ablegt.

Trifft ein Dateiname zufällig auf youtube_ oder vimeo_, wird statt der Exception ein echter HTTP-Request an den externen Dienst abgesetzt – ebenfalls einmal pro Bild.

Änderung

  • Das Regex matcht nur noch die Keys aus self::SERVICES. Das Muster wird dynamisch aufgebaut, damit ein künftig ergänzter Dienst automatisch mitgezogen wird und die Konstante die einzige Quelle der Wahrheit bleibt.
  • Der throw bei unbekanntem Service entfällt zugunsten des Fallback-Bilds. Das ist konsistent mit dem Verhalten bei fehlenden Parametern (Zeile 45-48), wo bereits still auf createFallbackImage() gegangen wird; der catch landete ohnehin beim selben Fallback, der Log-Eintrag hatte also keinen diagnostischen Wert.
  • Die isset-Prüfung bleibt erhalten: sie sichert weiterhin den Parameter-Pfad ($this->params['service']) ab, wo weiterhin ein beliebiger Wert ankommen kann.

Verhalten vorher / nachher

Dateiname vorher nachher
youtube_<id>_<hash>.jpg match match
vimeo_<id>_<hash>.jpg match match
foo_bar_baz.jpg match → Service foo → Exception kein Match
foo_bar_baz_qux.jpg match → Service foo → Exception kein Match
youtubex_bar_baz.jpg match → Service youtubex → Exception kein Match
my_youtube_clip.jpg match → Service my → Exception kein Match

Die beiden echten Anwendungsfälle verhalten sich unverändert, alle anderen Namen fallen still durch.

Workaround für Betroffene bis zum Release

rex_extension::register('CACHE_WARMUP_MEDIATYPES', function (rex_extension_point $ep) {
    return array_values(array_diff($ep->getSubject(), ['consent_manager_thumbnail']));
});

Umgebung

Gefunden mit consent_manager 5.8.3, cache_warmup 4.0.0, media_manager 2.18.3, REDAXO 5.21.4.

Den CHANGELOG habe ich bewusst nicht angefasst, da die Versionsnummer des nächsten Releases bei euch liegt – sagt gern Bescheid, dann ergänze ich einen Eintrag.

…beschraenken

Das Regex zur Service-Erkennung aus dem Dateinamen traf jede .jpg-Datei mit
mindestens zwei Unterstrichen im Namen, nicht nur die virtuellen Namen im
Schema service_videoid_hash.jpg. Der erste Namensteil wurde dadurch als
Service interpretiert und loeste eine rex_exception aus.

Das Muster wird jetzt aus den Keys von self::SERVICES aufgebaut, damit
kuenftige Dienste automatisch mitgezogen werden. Bei unbekanntem Service
wird still das Fallback-Bild erzeugt statt zu werfen - konsistent mit dem
Verhalten bei fehlenden Parametern, und der catch landete ohnehin beim
selben Fallback. Die isset-Pruefung bleibt als Absicherung des
Parameter-Pfads erhalten.
@skerbis
skerbis merged commit 7b1056d into FriendsOfREDAXO:main Aug 13, 2026
6 checks passed
@skerbis

skerbis commented Aug 13, 2026

Copy link
Copy Markdown
Member

danke

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants