From c19906eb87da5bf6382bdecdd91fe84b7d729867 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 27 Aug 2020 22:00:05 +0530 Subject: [PATCH] Fix read overflow reported by ASAN --- kitty/hyperlink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kitty/hyperlink.c b/kitty/hyperlink.c index 9b8988795..b9e4ea2bc 100644 --- a/kitty/hyperlink.c +++ b/kitty/hyperlink.c @@ -101,7 +101,10 @@ get_id_for_hyperlink(Screen *screen, const char *id, const char *url) { if (!url) return 0; HyperLinkPool *pool = (HyperLinkPool*)screen->hyperlink_pool; static char key[MAX_KEY_LEN] = {0}; - size_t keylen = snprintf(key, MAX_KEY_LEN-1, "%.*s:%s", MAX_ID_LEN, id ? id : "", url); + int keylen = snprintf(key, MAX_KEY_LEN-1, "%.*s:%s", MAX_ID_LEN, id ? id : "", url); + if (keylen < 0) keylen = strlen(key); + else keylen = MIN(keylen, MAX_KEY_LEN - 2); // snprintf returns how many chars it would have written in case of truncation + key[keylen] = 0; HyperLinkEntry *s = NULL; if (pool->hyperlinks) { HASH_FIND_STR(pool->hyperlinks, key, s);