From de7d1facf3609165bb8b8bb96e19022ef4f46dfc Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Sat, 3 Apr 2021 18:31:19 +0200 Subject: [PATCH] Add assertion that an expansion's total len doesn't overflow Typically not needed because the recursion depth limit should prevent it, but it might help debug weird lexer issues. --- src/asm/lexer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/asm/lexer.c b/src/asm/lexer.c index 367210e1..e7684c12 100644 --- a/src/asm/lexer.c +++ b/src/asm/lexer.c @@ -761,7 +761,10 @@ static void beginExpansion(size_t distance, uint8_t skip, char const *str, bool struct Expansion *parent = NULL; unsigned int depth = 0; -#define LOOKUP_PRE_NEST(exp) (exp)->totalLen += size - skip +#define LOOKUP_PRE_NEST(exp) do { \ + assert((exp)->totalLen <= SIZE_MAX - (size - skip)); \ + (exp)->totalLen += size - skip; \ +} while (0) #define LOOKUP_POST_NEST(exp) do { \ if (name && ++depth >= nMaxRecursionDepth) \ fatalerror("Recursion limit (%zu) exceeded\n", nMaxRecursionDepth); \