[LyX/master] Fix signed integer overflow on x = 0, detected by GCC sanitizer

Yuriy Skalko yuriy.skalko at gmail.com
Fri Nov 27 09:47:44 UTC 2020


commit fdefff1108d43739b6631015f55fb3cc94cfed2b
Author: Yuriy Skalko <yuriy.skalko at gmail.com>
Date:   Thu Nov 26 23:01:18 2020 +0200

    Fix signed integer overflow on x = 0, detected by GCC sanitizer
---
 src/support/lstrings.cpp |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/support/lstrings.cpp b/src/support/lstrings.cpp
index f0e79b8..9aac66a 100644
--- a/src/support/lstrings.cpp
+++ b/src/support/lstrings.cpp
@@ -1446,8 +1446,8 @@ std::string formatFPNumber(double x)
 	os << std::fixed;
 	// Prevent outputs of 23.4200000000000017 but output small numbers
 	// with at least 6 significant digits.
-	double const logarithm = log10(fabs(x));
-	os << std::setprecision(max(6 - iround(logarithm), 0)) << x;
+	int const precision = (x == 0.0) ? 0 : max(6 - iround(log10(fabs(x))), 0);
+	os << std::setprecision(precision) << x;
 	string result = os.str();
 	if (result.find('.') != string::npos) {
 		result = rtrim(result, "0");


More information about the lyx-cvs mailing list