From 81bedd5e898d97b87358e26a087b25741eb2c713 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Wed, 3 Mar 2021 15:34:04 +0100 Subject: [PATCH] d: Fix heap-buffer-overflow in checkModFileAlias [PR 99337] The code wrongly assumed memcmp did not read past the mismatch. gcc/d/ChangeLog: PR d/99337 * dmd/dmodule.c (checkModFileAlias): Don't read past buffer in comparison. (cherry picked from commit d6177870dd2696501e3b8d3930fd5549d4acaeae) --- gcc/d/dmd/dmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/d/dmd/dmodule.c b/gcc/d/dmd/dmodule.c index bf1c0c1f0d90..c67626c00e59 100644 --- a/gcc/d/dmd/dmodule.c +++ b/gcc/d/dmd/dmodule.c @@ -202,7 +202,7 @@ static void checkModFileAlias(OutBuffer *buf, OutBuffer *dotmods, const char *m = (*ms)[j]; const char *q = strchr(m, '='); assert(q); - if (dotmods->offset <= (size_t)(q - m) && memcmp(dotmods->peekString(), m, q - m) == 0) + if (dotmods->offset == (size_t)(q - m) && memcmp(dotmods->peekString(), m, q - m) == 0) { buf->reset(); size_t qlen = strlen(q + 1); -- 2.47.2