summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2016-03-08 13:48:30 +0000
committerAlbrecht Schlosser <albrechts.fltk@online.de>2016-03-08 13:48:30 +0000
commitad230031f5e3f1a2777645f45cbf01aa5e2c97db (patch)
treee7cb4a7cb61a4960ae5fb61fa100dd8859ba86d4
parentca54afe5f45bb197a0bceb3ee4a694e71b334f89 (diff)
Fix overflow in Fl_Valuator::precision(int) to 0...9 (STR #3280).
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11317 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--src/Fl_Valuator.cxx15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/Fl_Valuator.cxx b/src/Fl_Valuator.cxx
index e086ae535..dcc3bf1b6 100644
--- a/src/Fl_Valuator.cxx
+++ b/src/Fl_Valuator.cxx
@@ -51,10 +51,19 @@ void Fl_Valuator::step(double s) {
while (fabs(s-A/B) > epsilon && B<=(0x7fffffff/10)) {B *= 10; A = rint(s*B);}
}
-/** Sets the step value to 1/10<SUP>digits</SUP>.*/
-void Fl_Valuator::precision(int p) {
+/** Sets the step value to 1.0 / 10<SUP>digits</SUP>.
+
+ Precision \p digits is limited to 0...9 to avoid internal overflow errors.
+ Values outside this range are clamped.
+
+ \note For negative values of \p digits the step value is set to
+ \p A = 1.0 and \p B = 1, i.e. 1.0/1 = 1.
+*/
+void Fl_Valuator::precision(int digits) {
+ if (digits > 9) digits = 9;
+ else if (digits < 0) digits = 0;
A = 1.0;
- for (B = 1; p--;) B *= 10;
+ for (B = 1; digits--;) B *= 10;
}
/** Asks for partial redraw */
void Fl_Valuator::value_damage() {damage(FL_DAMAGE_EXPOSE);} // by default do partial-redraw