From 85d0c8ab00924b1e6d52da4f0dcbd1b37c77da9d Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 6 Dec 2021 09:02:30 -0800 Subject: [PATCH] lexer: Be consistent across 32/64 bit in lex_force_int_range(). The exact error message that this function reported varied between 32- and 64-bit platforms for invalid integers that require more than 32 bits but no more than 64 bits, since "long int" has a different range between those platforms. This commit fixes the problem. This issue caused the test "testing lexer crash due to overflow" to fail on 32-bit platforms. Thanks to Friedrich Beckmann for reporting the problem. --- src/language/lexer/lexer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index 2218caadd7..d94ae9df7c 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -821,9 +821,14 @@ lex_force_int (struct lexer *lexer) bool lex_force_int_range (struct lexer *lexer, const char *name, long min, long max) { + bool is_number = lex_is_number (lexer); bool is_integer = lex_is_integer (lexer); - bool too_small = is_integer && lex_integer (lexer) < min; - bool too_big = is_integer && lex_integer (lexer) > max; + bool too_small = (is_integer ? lex_integer (lexer) < min + : is_number ? lex_number (lexer) < min + : false); + bool too_big = (is_integer ? lex_integer (lexer) > max + : is_number ? lex_number (lexer) > max + : false); if (is_integer && !too_small && !too_big) return true; -- 2.30.2