Gedankenstriche durch Bindestriche ersetzt
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s

375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
This commit is contained in:
Harlekin
2026-09-04 08:54:52 +02:00
parent 38be773636
commit e0b03ea336
210 changed files with 368 additions and 368 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ import net from 'node:net'
*
* Es wird **INSTREAM** benutzt, nicht SCAN mit einem Pfad: dann muss der
* Scanner die Datei nicht sehen können, und die Anbindung funktioniert auch,
* wenn clamd anderswo läuft. Das Protokoll ist simpel — Länge als 4 Byte,
* wenn clamd anderswo läuft. Das Protokoll ist simpel - Länge als 4 Byte,
* Nutzdaten, dann eine Null-Länge als Abschluss.
*/
+1 -1
View File
@@ -2,7 +2,7 @@
* Grenzen für Uploads, aus docs/07-dateien-und-sicherheit.md.
*
* Ohne Abhängigkeiten, damit die Oberfläche dieselben Zahlen anzeigen kann,
* die der Server durchsetzt — geprüft wird ausschliesslich serverseitig.
* die der Server durchsetzt - geprüft wird ausschliesslich serverseitig.
*/
/** 25 MB pro Datei. */
+4 -4
View File
@@ -7,7 +7,7 @@
* Bewusst eine eigene Signaturtabelle statt `file-type`: die Liste der
* erlaubten Typen ist kurz und geschlossen, und was nicht darin steht, wird
* abgelehnt. Eine Bibliothek, die hundert Formate erkennt, hilft bei einer
* Positivliste nicht — sie erweitert nur die Angriffsfläche und die Menge
* Positivliste nicht - sie erweitert nur die Angriffsfläche und die Menge
* dessen, was aktuell gehalten werden muss. Der eigentliche Schutz ist ohnehin
* die Neukodierung danach, siehe `process.ts`.
*
@@ -67,7 +67,7 @@ export type Detection =
*
* Reine Textdateien haben keine Signatur. Sie werden deshalb zuletzt geprüft
* und nur dann angenommen, wenn der ganze Inhalt gültiges UTF-8 ohne
* Steuerzeichen ist — sonst wäre `text/plain` das Schlupfloch, durch das jedes
* Steuerzeichen ist - sonst wäre `text/plain` das Schlupfloch, durch das jedes
* Binärformat passt.
*/
export function detectType(content: Uint8Array): Detection {
@@ -106,8 +106,8 @@ export function looksLikeText(content: Uint8Array): boolean {
/**
* Der gemeldete Typ muss zum erkannten passen.
*
* Nicht, weil der gemeldete etwas wert wäre — er kommt vom Browser und ist frei
* wählbar —, sondern weil eine Abweichung ein Hinweis ist: wer eine PNG-Datei
* Nicht, weil der gemeldete etwas wert wäre - er kommt vom Browser und ist frei
* wählbar -, sondern weil eine Abweichung ein Hinweis ist: wer eine PNG-Datei
* hochlädt und sie als PDF ankündigt, hat etwas vor.
*/
export function matchesDeclared(detected: AllowedType, declared: string | null): boolean {
+1 -1
View File
@@ -11,7 +11,7 @@ import { getEnv } from '@/lib/env'
* Ausgeliefert wird ausschliesslich aus `store/`. Siehe docs/07.
*
* Der Dateiname ist die Kennung des Anhangs, nie der Name, den der Nutzer
* mitgeschickt hat — der steht in der Datenbank und wird erst beim Ausliefern
* mitgeschickt hat - der steht in der Datenbank und wird erst beim Ausliefern
* wieder gesetzt. Ein Pfad, der aus einer Eingabe entsteht, ist eine
* Einladung.
*/
+3 -3
View File
@@ -26,7 +26,7 @@ export async function runCheckChain(
/**
* Nur für die bewusste Freigabe durch einen Administrator, wenn der
* Scanner nicht erreichbar war. Die Typprüfung und die Neukodierung laufen
* auch dann — sie sind der eigentliche Schutz.
* auch dann - sie sind der eigentliche Schutz.
*/
skipScan?: boolean
} = {},
@@ -157,8 +157,8 @@ async function freigeben(
// Gleicher Inhalt schon da: nur verweisen, nicht ein zweites Mal ablegen.
//
// Der Verweis gilt aber nur, wenn die Datei auch wirklich noch liegt. Eine
// Zeile in der Datenbank ist kein Beweis dafür: geht die Ablage verloren —
// ein geleertes Verzeichnis, ein nicht eingehängtes Volume —, zeigten sonst
// Zeile in der Datenbank ist kein Beweis dafür: geht die Ablage verloren -
// ein geleertes Verzeichnis, ein nicht eingehängtes Volume -, zeigten sonst
// alle künftigen Uploads desselben Inhalts stumm ins Leere.
const vorhanden = await db.attachment.findFirst({
where: { sha256, scanStatus: 'CLEAN', id: { not: attachmentId } },
+2 -2
View File
@@ -16,7 +16,7 @@ const run = promisify(execFile)
* Das ist die wirksamste Massnahme der ganzen Kette. Ein Bild, das durch
* `sharp` gelaufen ist, besteht nur noch aus Pixeln: EXIF, Farbprofile,
* angehängte Nutzlast und alles, was ein Betrachter versehentlich auswerten
* könnte, sind weg — nicht gefiltert, sondern nie übernommen.
* könnte, sind weg - nicht gefiltert, sondern nie übernommen.
* Siehe docs/07-dateien-und-sicherheit.md.
*/
@@ -126,7 +126,7 @@ function reencodeText(content: Uint8Array): ReencodeResult {
*
* `--empty --pages datei 1-z --` baut das Dokument aus den Seiten neu auf.
* Der ursprüngliche Dokumentkatalog wird dabei nicht übernommen, und mit ihm
* verschwinden `OpenAction`, eingebettetes JavaScript und angehängte Dateien —
* verschwinden `OpenAction`, eingebettetes JavaScript und angehängte Dateien -
* die drei Wege, auf denen ein PDF etwas tut, statt nur dazustehen.
*
* Fehlt `qpdf`, wird die Datei **nicht** durchgewinkt. Sie bleibt in der
+5 -5
View File
@@ -91,7 +91,7 @@ async function aufloesen(
*
* Der Datensatz entsteht **sofort** mit `PENDING`, damit die Oberfläche ihn
* zeigen kann, während die Prüfung läuft. Der gemeldete Typ wandert
* unverändert in `mimeType` und wird von der Prüfkette überschrieben — bis
* unverändert in `mimeType` und wird von der Prüfkette überschrieben - bis
* dahin ist er nichts als eine Behauptung des Browsers.
*/
export async function acceptUpload(
@@ -183,7 +183,7 @@ export async function listAttachments(
* Lädt einen Anhang zum Ausliefern.
*
* Nur was die Prüfkette bestanden hat oder von einem Administrator bewusst
* freigegeben wurde. Alles andere gibt es für die Auslieferung nicht — auch
* freigegeben wurde. Alles andere gibt es für die Auslieferung nicht - auch
* nicht mit Recht `admin`, denn die Datei liegt dann noch in der Quarantäne.
*/
export async function loadDeliverable(p: EffectivePermissions, id: string) {
@@ -207,7 +207,7 @@ export async function loadDeliverable(p: EffectivePermissions, id: string) {
/**
* Gibt eine Datei frei, deren Prüfung nicht abgeschlossen werden konnte.
*
* Nur mit Recht `admin` und nur aus `FAILED` — was als Schadsoftware oder
* Nur mit Recht `admin` und nur aus `FAILED` - was als Schadsoftware oder
* unzulässiger Typ erkannt wurde, bleibt blockiert. Die Freigabe wiederholt
* die Kette ohne den Virenscanner; die Typprüfung läuft dabei **immer** mit.
*/
@@ -241,7 +241,7 @@ export async function releaseAttachment(
})
// Die Kette noch einmal, ohne den Scanner. Typprüfung und Neukodierung
// laufen dabei mit — die Freigabe überspringt nur das, was ausgefallen war.
// laufen dabei mit - die Freigabe überspringt nur das, was ausgefallen war.
await runCheckChain(id, { skipScan: true })
}
@@ -249,7 +249,7 @@ export async function releaseAttachment(
* Löst die Lichtbildfelder eines Dokuments zu Adressen auf.
*
* **Serverseitig**, und nur für Anhänge, die die Prüfkette bestanden haben und
* die der Leser sehen darf. Der Browser bekommt eine Adresse oder gar nichts —
* die der Leser sehen darf. Der Browser bekommt eine Adresse oder gar nichts -
* nie eine Kennung, zu der er selbst probieren müsste.
*/
export async function resolvePhotoUrls(
+1 -1
View File
@@ -4,7 +4,7 @@ import type { AttachmentView } from '@/components/files/Attachments'
* Formt die Datenbankzeilen für die Oberfläche um.
*
* Zwei Dinge passieren hier, beide mit Absicht: `thumbKey` wird zu einem
* Wahrheitswert — der Pfad auf der Platte geht den Browser nichts an —, und
* Wahrheitswert - der Pfad auf der Platte geht den Browser nichts an -, und
* `createdAt` wird zu einer Zeichenkette, weil ein `Date` die Grenze zur
* Client-Komponente nicht sauber überquert.
*/