From 98db9658136cfc41b496b005c9df537f59aed6b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 10 Feb 2025 08:54:42 +0100 Subject: [PATCH] url-mode: terminate last virtual line before regex matching If the last line doesn't have a hard linebreak, it was never NULL terminated, causing regexec() to crash on an out-of-bounds access. --- url-mode.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/url-mode.c b/url-mode.c index 6fd7f03a..00d38d75 100644 --- a/url-mode.c +++ b/url-mode.c @@ -388,10 +388,14 @@ regex_detected(const struct terminal *term, enum url_action action, } } + /* Terminate the last line, if necessary */ + if (vline->len > 0 && vline->utf8[vline->len - 1] != '\0') + vline->utf8[vline->len++] = '\0'; + for (size_t i = 0; i < ALEN(vlines); i++) { const struct vline *v = &vlines[i]; if (v->utf8 == NULL) - continue;; + continue; const char *search_string = v->utf8; while (true) {