From d24cda64d10b9056d716da0fa97a947c92f86804 Mon Sep 17 00:00:00 2001 From: Arcady Goldmints-Orlov Date: Fri, 29 Mar 2024 20:09:37 -0400 Subject: [PATCH] Check for exponent overflow in float parser Even for a double precision float, the largest valid exponent is 308, so clamp exponents to 500 when parsing to avoid overflow of the parsed exponent value if the exponent is too big. --- glslang/MachineIndependent/preprocessor/PpScanner.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 34dec207..49dafa59 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -220,7 +220,9 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) } if (ch >= '0' && ch <= '9') { while (ch >= '0' && ch <= '9') { - exponent = exponent * 10 + (ch - '0'); + if (exponent < 500) { + exponent = exponent * 10 + (ch - '0'); + } saveName(ch); ch = getChar(); }