Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duden/Regex reparieren + Tests erstellen #99

Open
bafto opened this issue Nov 15, 2024 · 1 comment
Open

Duden/Regex reparieren + Tests erstellen #99

bafto opened this issue Nov 15, 2024 · 1 comment
Assignees
Labels
Fehler: Laufzeitfehler Laufzeitfehler Tests: stdlib Tests für den Duden Thema: Duden Zum Thema Duden Typ: Fehler Irgendwas funktioniert nicht richtig

Comments

@bafto
Copy link
Member

bafto commented Nov 15, 2024

Das Module Duden/Regex ist ungetested und kapput.
Beispielsweise führt das folgende Snippet zu einem Segmentation fault:

Der Text uri_regex ist "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?".
Der Text uri ist "http://bafto:[email protected]:8080/pub/ietf/uri/?a=5&b=6#Related".
Der Treffer t ist der erste Treffer von uri_regex in uri.
Wenn es dabei einen Fehler gab oder (text von t) leer ist, 
	Schreibe "Fehler" auf eine Zeile.

Schreibe (text von t) auf eine Zeile.
Schreibe (gruppen von t) auf eine Zeile.

Der grund war, dass der Rückgabewert von pcre2_substring_get_bynumber nicht überprüft wurde. Der fix wäre:

		switch (pcre2_substring_get_bynumber(match_data, i, &substring, &substring_length)) {
		case PCRE2_ERROR_UNSET:
		case PCRE2_ERROR_NOSUBSTRING:
			*(i == 0 ? &tr->text : &tr->gruppen.arr[i - 1]) = DDP_EMPTY_STRING;
			continue;
		case PCRE2_ERROR_UNAVAILABLE:
			ddp_error("Keine Gruppe mit Nummer %d vorhanden", false, i);
			continue;
		case PCRE2_ERROR_NOMEMORY:
			ddp_runtime_error(1, "out of memory during regex parsing");
			continue;
		}

in make_Treffer in regex.c.

Ich vermute, dass solche Fehler im gesamten Modul zu finden sind, und es sieht so aus als ob das Modul (noch nie?) nicht richtig getestet wurde.

Dieser Issue ist dazu da gute und ausführliche Tests für das Modul zu erstellen und den code in regex.c zu korrigieren.

@bafto bafto added Typ: Fehler Irgendwas funktioniert nicht richtig Fehler: Laufzeitfehler Laufzeitfehler Thema: Duden Zum Thema Duden labels Nov 15, 2024
@NotLe0n NotLe0n added the Tests: stdlib Tests für den Duden label Nov 15, 2024
@bafto
Copy link
Member Author

bafto commented Nov 23, 2024

Außerdem ist das Regex Module allgemein noch sehr minimal.
Beispielweise besteht nicht die Möglichkeit einen Regulären Ausdruck zu kompilieren und dann mehrmals zu verwenden. Das kann zu (sehr) großen Performance Problemen führen.

Weiß nicht ob für das erweitern ein neuer Issue besser wäre oder ob das hier oder in #39 mit drin ist @NotLe0n .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Fehler: Laufzeitfehler Laufzeitfehler Tests: stdlib Tests für den Duden Thema: Duden Zum Thema Duden Typ: Fehler Irgendwas funktioniert nicht richtig
Projects
None yet
Development

No branches or pull requests

2 participants