-- Bugfix #3566: Entering very large numbers for scaling/rotation/translation

cause a write past end of string buffers in outputNumInput().  Patched to
   make large numbers (+-1.0e+10) display in scientific notation format.
This commit is contained in:
Ken Hughes
2005-12-12 23:03:32 +00:00
parent 556451345b
commit b72dc4585f

View File

@@ -59,32 +59,35 @@ void outputNumInput(NumInput *n, char *str)
else
cur = '|';
switch (n->ctrl[i]) {
case 0:
sprintf(&str[j*20], "NONE%c", cur);
break;
case 1:
case -1:
sprintf(&str[j*20], "%.0f%c", n->val[i], cur);
break;
case 10:
case -10:
sprintf(&str[j*20], "%.f.%c", n->val[i], cur);
break;
case 100:
case -100:
sprintf(&str[j*20], "%.1f%c", n->val[i], cur);
break;
case 1000:
case -1000:
sprintf(&str[j*20], "%.2f%c", n->val[i], cur);
case 10000:
case -10000:
sprintf(&str[j*20], "%.3f%c", n->val[i], cur);
break;
default:
sprintf(&str[j*20], "%.4f%c", n->val[i], cur);
}
if( n->val[i] > 1e10 || n->val[i] < -1e10 )
sprintf(&str[j*20], "%.4e%c", n->val[i], cur);
else
switch (n->ctrl[i]) {
case 0:
sprintf(&str[j*20], "NONE%c", cur);
break;
case 1:
case -1:
sprintf(&str[j*20], "%.0f%c", n->val[i], cur);
break;
case 10:
case -10:
sprintf(&str[j*20], "%.f.%c", n->val[i], cur);
break;
case 100:
case -100:
sprintf(&str[j*20], "%.1f%c", n->val[i], cur);
break;
case 1000:
case -1000:
sprintf(&str[j*20], "%.2f%c", n->val[i], cur);
case 10000:
case -10000:
sprintf(&str[j*20], "%.3f%c", n->val[i], cur);
break;
default:
sprintf(&str[j*20], "%.4e%c", n->val[i], cur);
}
}
}