Ein verstecktes 50-Byte-Limit bei SQLite-LIKE-Mustern führte dazu, dass Cloudflare Workers abstürzten, als das Agentic Inbox-Projekt versuchte, nach langen E-Mail-Betreffzeilen zu suchen; das Kürzen der Suchstrings auf 48 Zeichen verhinderte die Fehler.

Was die Edge-Runtime zum Absturz brachte

Agentic Inbox führt jedes Postfach innerhalb eines Cloudflare Durable Object aus und nutzt eine eingebettete SQLite-Datenbank zur Speicherung. Der KI-gesteuerte Agent erstellt ein Suchmuster als %search_term%. SQLite erzwingt eine strikte Obergrenze von 50 Byte für die Gesamtlänge eines LIKE-Musters. Wenn ein Benutzer einen Betreff eingab, der länger als 48 Zeichen war, drückten die umgebenden %-Zeichen das Muster über diese Grenze. SQLite warf einen nicht abgefangenen Laufzeitfehler, den die eingeschränkte Worker-Umgebung als fatal behandelte. Das gesamte Skript wurde beendet, wodurch das Postfach unbrauchbar wurde und der KI-Agent ausfiel.

Wie der Bug entdeckt wurde

Sentry protokollierte nicht abgefangene Ausnahmen (Exceptions) der Workers. Als der Absturz auftrat, zeichnete Sentry die exakte Zeile auf, in der SQLite einen Fehler auslöste. Die „Seer AI“-Funktion analysierte den Stacktrace, markierte die Konstruktion des LIKE-Musters und deutete die Musterlänge als Ursache an. Ein kurzer Blick in die Compile-Time-Dokumentation von SQLite bestätigte die 50-Byte-Beschränkung, und das Team nutzte Gemini, um das Limit zu verifizieren und eine sichere maximale Länge für Benutzereingaben zu berechnen.

Der chirurgische Fix

Die Lösung erforderte drei winzige Änderungen, alle innerhalb der bestehenden Suchroutine:

  • Einführung einer strikten Grenze von 48 Zeichen für jeden eingehenden Suchbegriff.
  • Kürzen (Slicing) des Eingabestrings auf diese Länge, bevor die %-Wildcards hinzugefügt werden.
  • Den Rest der Abfrage unverändert lassen, um die Suchgenauigkeit beizubehalten, ohne neue Bibliotheken hinzuzufügen.

Da die Anpassung erfolgt, bevor die Abfrage SQLite erreicht, überschreitet das endgültige Muster niemals den 50-Byte-Schwellenwert, und der Worker stürzt nicht mehr ab. Es wurden keine zusätzlichen Abhängigkeiten hinzugefügt, sodass die Codebasis leichtgewichtig bleibt.

Warum das wichtig ist

Edge-gehostete Datenbanken sind attraktiv für Anwendungsfälle mit geringer Latenz, aber sie unterliegen denselben Einschränkungen wie On-Premises-Versionen. Ein obskures Compile-Time-Limit kann zu einem produktionskritischen Bug werden, wenn eine Runtime jede nicht abgefangene Exception als fatal behandelt. In diesem Fall verhinderte der Absturz die Arbeit eines KI-gestützten E-Mail-Assistenten für jeden Benutzer, der eine lange Betreffzeile eingab – ein direkter Schlag gegen die Benutzererfahrung und das Zuverlässigkeitsversprechen von Serverless-Plattformen.

Was man anders hätte machen können

Der Fix ist unkompliziert, verdeutlicht aber einen versäumten Validierungsschritt. Eine Input-Sanitization, die die Musterlänge prüft, bevor der SQL-String erstellt wird, hätte das Problem bereits während der Entwicklung statt erst in der Produktion erkannt.

Worauf man als Nächstes achten sollte

Entwickler, die SQLite auf Edge-Runtimes einsetzen, sollten alle Abfragekonstruktionen prüfen, die Pattern Matching beinhalten, insbesondere solche, die Wildcards oder Escape-Zeichen hinzufügen. Sentry hat die exakte Zeile erfasst, in der SQLite fehlschlug. Da Edge Computing immer mehr an Bedeutung gewinnt, werden versteckte Plattform-Limits häufiger auftreten; die Gewohnheit, Eingaben gegen dokumentierte Einschränkungen zu validieren, wird sich auszahlen.

Fazit: Eine 50-Byte-Obergrenze bei SQLite-LIKE-Mustern kann Cloudflare Workers zum Absturz bringen, aber das Kürzen von Suchbegriffen auf 48 Zeichen beseitigt den Fehler ohne zusätzlichen Ballast – ein Beweis dafür, dass ein winziger Validierungsschritt Edge-Services stabil halten kann.