Pruefung auf doppelte Funktionsnamen — und ein zweiter Fund

Die Kollision von heute war weder fuer den Browser noch fuer einen
Syntaxpruefer sichtbar: Zwei Funktionen desselben Namens sind erlaubtes
JavaScript, die spaetere gewinnt lautlos. Auch die
Oberflaechen-Tests schwiegen -- sie pruefen, ob Kacheln DA sind, nicht
ob sinnvoller Text darin steht.

pruef-namenskollision.mjs durchsucht jetzt alle 110 Dateien mit eigenem
JavaScript. Mit Gegenprobe, damit die Pruefung nicht selbst kaputtgehen
und dabei "sauber" melden kann.

ZWEITER FUND, AELTER ALS MEIN FEHLER

Sie meldete sofort eine weitere Kollision: tageSeit stand zweimal in
verwaltung.html. Beide rechneten dasselbe, mit einem Unterschied -- bei
fehlendem Datum gab die eine null zurueck, die andere 0.

Die spaetere (mit 0) gewann. Damit war die frueher definierte
wirkungslos, und mit ihr die Pruefungen "if (t === null) return ''" in
altersText und dringlichkeit: Ohne Datum stand dort "seit heute" statt
gar nichts.

Entfernt wurde die spaetere. Die beiden verbliebenen Aufrufer vertragen
null genauso wie 0 -- nachgeprueft, nicht angenommen: Math.max(x, null)
ergibt x, und null >= 7 ist falsch, gleich wie bei 0.

110 Dateien jetzt sauber.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-26 14:58:12 +02:00
co-authored by Claude Opus 5
parent 0e8c1447f2
commit 92d2b568de
5 changed files with 123 additions and 14 deletions
+1 -1
View File
@@ -34,7 +34,7 @@
Start alle alten Zwischenspeicher weg. Muss bei jeder Änderung an den
Dateien unten hochgezählt werden, sonst hängen Nutzer auf einem alten
Stand fest. */
const CACHE_NAME = "dogfather-webdesign-v57";
const CACHE_NAME = "dogfather-webdesign-v58";
/* Bausteine, die die Oberfläche zum Anzeigen braucht. Bewusst KEINE
HTML-Datei in dieser Liste. */
+19 -12
View File
@@ -3223,18 +3223,25 @@
}
/* Ganze Tage seit einem Zeitpunkt. Bewusst ueber den Kalendertag
gerechnet, nicht ueber 24-Stunden-Bloecke: eine Anfrage von gestern
23:50 Uhr ist umgangssprachlich "gestern", nicht "vor 0 Tagen". */
function tageSeit(zeit) {
if (!zeit) return 0;
var dann = new Date(zeit);
if (isNaN(dann.getTime())) return 0;
var a = new Date(dann.getFullYear(), dann.getMonth(), dann.getDate());
var heute = new Date();
var b = new Date(heute.getFullYear(), heute.getMonth(), heute.getDate());
return Math.round((b - a) / 86400000);
}
/* ⚠️ HIER STAND EINE ZWEITE FUNKTION tageSeit (entfernt 26.08.2026).
Sie rechnete dasselbe wie die weiter oben, unterschied sich aber in
einem Punkt: Bei fehlendem oder unlesbarem Datum gab sie 0 zurueck,
die obere gibt null.
Weil in JavaScript die spaetere Definition gewinnt, war die obere
seit ihrer Einfuehrung wirkungslos -- und mit ihr die Pruefungen
"if (t === null) return ''" in altersText und dringlichkeit. Ohne
Datum stand dort seither "seit heute" statt gar nichts.
Gefunden hat das keine Fehlermeldung, sondern pruef-namenskollision.mjs,
entstanden am selben Tag aus genau demselben Fehler an anderer
Stelle. Zwei Funktionen desselben Namens sind erlaubtes JavaScript;
kein Browser und kein Syntaxpruefer schlaegt an.
Die beiden verbliebenen Aufrufer weiter unten vertragen null
genauso wie 0 -- geprueft: Math.max(x, null) ergibt x, und
null >= 7 ist falsch, gleich wie bei 0. */
function zeitText(tage) {
if (tage <= 0) return "heute";