From: Ben Pfaff Date: Mon, 6 Dec 2021 17:02:30 +0000 (-0800) Subject: lexer: Be consistent across 32/64 bit in lex_force_int_range(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=85d0c8ab00924b1e6d52da4f0dcbd1b37c77da9d 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. --- 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;