Fix for #467276: NaN/Infinity.toExponential(...) should not check range

git-svn-id: svn://10.0.0.236/trunk@255507 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
szegedia%freemail.hu 2008-12-12 11:42:55 +00:00
parent 962c31bc46
commit 46812e1385

View File

@ -161,13 +161,44 @@ final class NativeNumber extends IdScriptableObject
return num_to(value, args, DToA.DTOSTR_FIXED,
DToA.DTOSTR_FIXED, -20, 0);
case Id_toExponential:
return num_to(value, args, DToA.DTOSTR_STANDARD_EXPONENTIAL,
DToA.DTOSTR_EXPONENTIAL, 0, 1);
case Id_toExponential: {
// Handle special values before range check
if(Double.isNaN(value)) {
return "NaN";
}
if(Double.isInfinite(value)) {
if(value >= 0) {
return "Infinity";
}
else {
return "-Infinity";
}
}
// General case
return num_to(value, args, DToA.DTOSTR_STANDARD_EXPONENTIAL,
DToA.DTOSTR_EXPONENTIAL, 0, 1);
}
case Id_toPrecision:
return num_to(value, args, DToA.DTOSTR_STANDARD,
DToA.DTOSTR_PRECISION, 1, 0);
case Id_toPrecision: {
// Undefined precision, fall back to ToString()
if(args.length == 0 || args[0] == Undefined.instance) {
return ScriptRuntime.numberToString(value, 10);
}
// Handle special values before range check
if(Double.isNaN(value)) {
return "NaN";
}
if(Double.isInfinite(value)) {
if(value >= 0) {
return "Infinity";
}
else {
return "-Infinity";
}
}
return num_to(value, args, DToA.DTOSTR_STANDARD,
DToA.DTOSTR_PRECISION, 1, 0);
}
default: throw new IllegalArgumentException(String.valueOf(id));
}